Parcourir la source

优化代码 托收导出

java110 il y a 5 ans
Parent
commit
7baba369e5

+ 1 - 0
java110-bean/src/main/java/com/java110/dto/fee/FeeConfigDto.java

@@ -22,6 +22,7 @@ public class FeeConfigDto extends PageDto implements Serializable {
     public static final String BILL_TYPE_ONCE_MONTH = "005";// 一次性按月
 
     public static final String DEFAULT_FEE_CONFIG = "T";
+    public static final String CUSTOME_FEE_CONFIG = "F";
 
     public static final String FEE_TYPE_CD_WATER = "888800010016";//电费
     public static final String FEE_TYPE_CD_METER = "888800010015";//水费

+ 9 - 0
java110-bean/src/main/java/com/java110/dto/feeManualCollectionDetail/FeeManualCollectionDetailDto.java

@@ -30,6 +30,7 @@ public class FeeManualCollectionDetailDto extends PageDto implements Serializabl
     private String communityId;
     private String collectionId;
     private String feeId;
+    private String configId;
 
 
     private Date createTime;
@@ -133,4 +134,12 @@ public class FeeManualCollectionDetailDto extends PageDto implements Serializabl
     public void setStateName(String stateName) {
         this.stateName = stateName;
     }
+
+    public String getConfigId() {
+        return configId;
+    }
+
+    public void setConfigId(String configId) {
+        this.configId = configId;
+    }
 }

+ 3 - 1
java110-db/src/main/resources/mapper/fee/FeeManualCollectionDetailServiceDaoImplMapper.xml

@@ -19,9 +19,11 @@
     <select id="getFeeManualCollectionDetailInfo" parameterType="Map" resultType="Map">
         select t.amount,t.fee_name,t.fee_name feeName,t.detail_id,t.detail_id detailId,t.start_time,t.start_time
         startTime,t.status_cd,t.status_cd statusCd,t.end_time,t.end_time endTime,t.state,t.community_id,t.community_id
-        communityId,t.collection_id,t.collection_id collectionId,t.fee_id,t.fee_id feeId,td.name stateName
+        communityId,t.collection_id,t.collection_id collectionId,t.fee_id,t.fee_id feeId,td.name stateName,
+        pf.config_id configId
         from fee_manual_collection_detail t
         left join t_dict td on t.state = td.status_cd and td.table_name = 'fee_manual_collection_detail' and td.table_columns = 'state'
+        left join pay_fee pf on t.fee_id = pf.fee_id and pf.status_cd = '0' and pf.community_id = t.community_id
         where 1 =1
         <if test="amount !=null and amount != ''">
             and t.amount= #{amount}

+ 23 - 3
service-fee/src/main/java/com/java110/fee/api/FeeManualCollectionApi.java

@@ -8,6 +8,7 @@ import com.java110.fee.bmo.feeManualCollection.IGetFeeManualCollectionBMO;
 import com.java110.fee.bmo.feeManualCollection.ISaveFeeManualCollectionBMO;
 import com.java110.fee.bmo.feeManualCollection.IUpdateFeeManualCollectionBMO;
 import com.java110.fee.bmo.feeManualCollectionDetail.IDeleteFeeManualCollectionDetailBMO;
+import com.java110.fee.bmo.feeManualCollectionDetail.IGetExportCollectionBMO;
 import com.java110.fee.bmo.feeManualCollectionDetail.IGetFeeManualCollectionDetailBMO;
 import com.java110.fee.bmo.feeManualCollectionDetail.ISaveFeeManualCollectionDetailBMO;
 import com.java110.fee.bmo.feeManualCollectionDetail.IUpdateFeeManualCollectionDetailBMO;
@@ -48,6 +49,9 @@ public class FeeManualCollectionApi {
     @Autowired
     private IGetFeeManualCollectionDetailBMO getFeeManualCollectionDetailBMOImpl;
 
+    @Autowired
+    private IGetExportCollectionBMO getExportCollectionBMOImpl;
+
     /**
      * 微信保存消息模板
      *
@@ -203,9 +207,9 @@ public class FeeManualCollectionApi {
      */
     @RequestMapping(value = "/queryCollectionDetail", method = RequestMethod.GET)
     public ResponseEntity<String> queryCollectionDetail(@RequestParam(value = "communityId") String communityId,
-                                                                 @RequestParam(value = "collectionId", required = false) String collectionId,
-                                                                 @RequestParam(value = "page") int page,
-                                                                 @RequestParam(value = "row") int row) {
+                                                        @RequestParam(value = "collectionId", required = false) String collectionId,
+                                                        @RequestParam(value = "page") int page,
+                                                        @RequestParam(value = "row") int row) {
         FeeManualCollectionDetailDto feeManualCollectionDetailDto = new FeeManualCollectionDetailDto();
         feeManualCollectionDetailDto.setPage(page);
         feeManualCollectionDetailDto.setRow(row);
@@ -213,4 +217,20 @@ public class FeeManualCollectionApi {
         feeManualCollectionDetailDto.setCollectionId(collectionId);
         return getFeeManualCollectionDetailBMOImpl.get(feeManualCollectionDetailDto);
     }
+
+    /**
+     * 微信删除消息模板
+     *
+     * @param communityId 小区ID
+     * @return
+     * @serviceCode /feeManualCollection/queryExportCollections
+     * @path /app/feeManualCollection/queryExportCollections
+     */
+    @RequestMapping(value = "/queryExportCollections", method = RequestMethod.GET)
+    public ResponseEntity<String> queryExportCollections(@RequestParam(value = "communityId") String communityId) {
+        FeeManualCollectionDetailDto feeManualCollectionDetailDto = new FeeManualCollectionDetailDto();
+        feeManualCollectionDetailDto.setCommunityId(communityId);
+
+        return getExportCollectionBMOImpl.get(feeManualCollectionDetailDto);
+    }
 }

+ 19 - 0
service-fee/src/main/java/com/java110/fee/bmo/feeManualCollectionDetail/IGetExportCollectionBMO.java

@@ -0,0 +1,19 @@
+package com.java110.fee.bmo.feeManualCollectionDetail;
+
+import com.java110.dto.feeManualCollectionDetail.FeeManualCollectionDetailDto;
+import org.springframework.http.ResponseEntity;
+
+public interface IGetExportCollectionBMO {
+
+
+    /**
+     * 查询托收明细
+     * add by wuxw
+     *
+     * @param feeManualCollectionDetailDto
+     * @return
+     */
+    ResponseEntity<String> get(FeeManualCollectionDetailDto feeManualCollectionDetailDto);
+
+
+}

+ 116 - 0
service-fee/src/main/java/com/java110/fee/bmo/feeManualCollectionDetail/impl/GetCollectionBMOImpl.java

@@ -0,0 +1,116 @@
+package com.java110.fee.bmo.feeManualCollectionDetail.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.java110.dto.fee.FeeConfigDto;
+import com.java110.dto.feeManualCollection.FeeManualCollectionDto;
+import com.java110.dto.feeManualCollectionDetail.FeeManualCollectionDetailDto;
+import com.java110.fee.bmo.feeManualCollectionDetail.IGetExportCollectionBMO;
+import com.java110.intf.IFeeManualCollectionDetailInnerServiceSMO;
+import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
+import com.java110.intf.fee.IFeeManualCollectionInnerServiceSMO;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service("getCollectionBMOImpl")
+public class GetCollectionBMOImpl implements IGetExportCollectionBMO {
+
+    @Autowired
+    private IFeeManualCollectionDetailInnerServiceSMO feeManualCollectionDetailInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeManualCollectionInnerServiceSMO feeManualCollectionInnerServiceSMOImpl;
+
+    @Autowired
+    private IFeeConfigInnerServiceSMO feeConfigInnerServiceSMOImpl;
+
+    /**
+     * @param feeManualCollectionDetailDto
+     * @return 订单服务能够接受的报文
+     */
+    public ResponseEntity<String> get(FeeManualCollectionDetailDto feeManualCollectionDetailDto) {
+
+        FeeConfigDto feeConfigDto = new FeeConfigDto();
+        feeConfigDto.setCommunityId(feeManualCollectionDetailDto.getCommunityId());
+        feeConfigDto.setIsDefault(FeeConfigDto.CUSTOME_FEE_CONFIG);
+        List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
+
+        JSONArray data = new JSONArray();
+
+        if (feeConfigDtos == null || feeConfigDtos.size() < 1) {
+            return ResultVo.createResponseEntity(0, 0, data);
+        }
+        FeeManualCollectionDto feeManualCollectionDto = new FeeManualCollectionDto();
+        feeManualCollectionDto.setCommunityId(feeManualCollectionDetailDto.getCommunityId());
+        feeManualCollectionDto.setState(FeeManualCollectionDto.STATE_COLLECTION);
+        List<FeeManualCollectionDto> feeManualCollectionDtos = feeManualCollectionInnerServiceSMOImpl.queryFeeManualCollections(feeManualCollectionDto);
+
+        if (feeManualCollectionDtos == null || feeManualCollectionDtos.size() < 1) {
+            return ResultVo.createResponseEntity(0, 0, data);
+        }
+        for (FeeManualCollectionDto tmpFeeManualCollectionDto : feeManualCollectionDtos) {
+
+            doDealDetail(tmpFeeManualCollectionDto, feeConfigDtos, data);
+
+        }
+        return ResultVo.createResponseEntity(data);
+    }
+
+    private void doDealDetail(FeeManualCollectionDto tmpFeeManualCollectionDto, List<FeeConfigDto> feeConfigDtos, JSONArray data) {
+
+        JSONObject dataObj = new JSONObject();
+
+        List<FeeManualCollectionDetailDto> feeManualCollectionDetailDtos = null;
+
+        FeeManualCollectionDetailDto feeManualCollectionDetailDto = new FeeManualCollectionDetailDto();
+        feeManualCollectionDetailDto.setCollectionId(tmpFeeManualCollectionDto.getCollectionId());
+        feeManualCollectionDetailDto.setCommunityId(tmpFeeManualCollectionDto.getCommunityId());
+        feeManualCollectionDetailDto.setState(FeeManualCollectionDetailDto.STATE_COLLECTION);
+
+        feeManualCollectionDetailDtos = feeManualCollectionDetailInnerServiceSMOImpl.queryFeeManualCollectionDetails(feeManualCollectionDetailDto);
+
+        if (feeManualCollectionDetailDtos == null || feeManualCollectionDetailDtos.size() < 1) {
+            return;
+        }
+
+        dataObj.put("房号", tmpFeeManualCollectionDto.getRoomName());
+        dataObj.put("姓名", tmpFeeManualCollectionDto.getOwnerName());
+        dataObj.put("联系电话", tmpFeeManualCollectionDto.getLink());
+        dataObj.put("收费面积/m2", tmpFeeManualCollectionDto.getRoomArea());
+
+
+        for (FeeConfigDto feeConfigDto : feeConfigDtos) {
+
+            FeeManualCollectionDetailDto tmpFeeManualCollectionDetailDto = hasFeeConfig(feeConfigDto, feeManualCollectionDetailDtos);
+
+            if (tmpFeeManualCollectionDetailDto == null) {
+                dataObj.put(feeConfigDto.getFeeName(), "0");
+                dataObj.put(feeConfigDto.getFeeName() + "_起止日期", "-");
+                continue;
+            }
+
+            dataObj.put(feeConfigDto.getFeeName(), tmpFeeManualCollectionDetailDto.getAmount());
+            dataObj.put(feeConfigDto.getFeeName() + "_起止日期",
+                    tmpFeeManualCollectionDetailDto.getStartTime() + "至" + tmpFeeManualCollectionDetailDto.getEndTime());
+        }
+
+        data.add(dataObj);
+
+    }
+
+    private FeeManualCollectionDetailDto hasFeeConfig(FeeConfigDto feeConfigDto, List<FeeManualCollectionDetailDto> feeManualCollectionDetailDtos) {
+
+        for (FeeManualCollectionDetailDto feeManualCollectionDetailDto : feeManualCollectionDetailDtos) {
+            if (feeManualCollectionDetailDto.getConfigId().equals(feeConfigDto.getConfigId())) {
+                return feeManualCollectionDetailDto;
+            }
+        }
+
+        return null;
+    }
+
+}

+ 38 - 0
service-front/src/main/java/com/java110/front/components/assetImport/FeeManualCollectionComponent.java

@@ -0,0 +1,38 @@
+package com.java110.front.components.assetImport;
+
+import com.java110.core.context.IPageData;
+import com.java110.front.controller.CallComponentController;
+import com.java110.front.smo.assetExport.IExportFeeManualCollectionSMO;
+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("feeManualCollection")
+public class FeeManualCollectionComponent {
+
+    private final static Logger logger = LoggerFactory.getLogger(FeeManualCollectionComponent.class);
+
+    @Autowired
+    private IExportFeeManualCollectionSMO exportFeeManualCollectionSMOImpl;
+
+    /**
+     * 添加应用数据
+     *
+     * @param pd 页面数据封装
+     * @return ResponseEntity 对象
+     */
+    public ResponseEntity<Object> exportData(IPageData pd) throws Exception {
+
+        return exportFeeManualCollectionSMOImpl.exportExcelData(pd);
+    }
+
+
+}

+ 22 - 0
service-front/src/main/java/com/java110/front/smo/assetExport/IExportFeeManualCollectionSMO.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 IExportFeeManualCollectionSMO {
+
+    /**
+     * 导入excel数据
+     * @param pd 前台数据封装
+     * @return ResponseEntity
+     */
+    public ResponseEntity<Object> exportExcelData(IPageData pd) throws Exception;
+}

+ 183 - 0
service-front/src/main/java/com/java110/front/smo/assetExport/impl/ExportFeeManualCollectionSMOImpl.java

@@ -0,0 +1,183 @@
+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.IExportFeeManualCollectionSMO;
+import com.java110.utils.constant.ServiceConstant;
+import com.java110.utils.util.Assert;
+import com.java110.utils.util.DateUtil;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+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("exportFeeManualCollectionSMOImpl")
+public class ExportFeeManualCollectionSMOImpl extends BaseComponentSMO implements IExportFeeManualCollectionSMO {
+    private final static Logger logger = LoggerFactory.getLogger(ExportFeeManualCollectionSMOImpl.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", "请求中未包含小区");
+
+        Workbook workbook = null;  //工作簿
+        //工作表
+        workbook = new XSSFWorkbook();
+        //获取楼信息
+        getRoomFees(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=feeManualCollection_" + 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 getExistsRoomFee(IPageData pd, ComponentValidateResult result) {
+        String apiUrl = "";
+        ResponseEntity<String> responseEntity = null;
+        apiUrl = ServiceConstant.SERVICE_API_URL + "/api/feeManualCollection/queryExportCollections?communityId=" + result.getCommunityId();
+        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 getRoomFees(IPageData pd, ComponentValidateResult componentValidateResult, Workbook workbook) {
+        Sheet sheet = workbook.createSheet("人工托收");
+        Row row = sheet.createRow(0);
+        Cell cell0 = row.createCell(0);
+        cell0.setCellValue("小区名称:         ;办公电话:        ;具体交费地点:        ;\n" +
+                "对公信息:开户名:              ;对公账号:               ;开户行:              ;税号:               ;\n" +
+                "对接人员姓名(包括项目上的和公司财务对接人员):          ;对接人员电话:          ;\n" +
+                "可否上门收:        ;有无业委会:     ;是否属前期物业:       ;物业上班时间:             ;" +
+                "物业入驻小区开始服务时间:如:2014年1月1号服务至今   ;有无涨价:     ;有无涨价公告:    ;" +
+                "有无提前收取其他费用(如:水电周转金      、装修押金       、土头清运费      )");
+        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("收费面积/m2");
+
+
+        //查询楼栋信息
+        JSONArray rooms = this.getExistsRoomFee(pd, componentValidateResult);
+        if (rooms == null || rooms.size() < 1) {
+            CellRangeAddress region = new CellRangeAddress(0, 0, 0, 6);
+            sheet.addMergedRegion(region);
+            return;
+        }
+        JSONObject dataObj = rooms.getJSONObject(0);
+        int dataKeyIndex = 1;
+        for (String key : dataObj.keySet()) {
+            if (key.contains("-")) {
+                row.createCell(dataKeyIndex).setCellValue(key.substring(key.indexOf("-") + 1));
+            } else {
+                row.createCell(dataKeyIndex).setCellValue(key);
+            }
+            dataKeyIndex++;
+        }
+
+        for (int roomIndex = 0; roomIndex < rooms.size(); roomIndex++) {
+            row = sheet.createRow(roomIndex + 2);
+            dataObj = rooms.getJSONObject(roomIndex);
+            dataKeyIndex = 0;
+            for (String key : dataObj.keySet()) {
+                row.createCell(dataKeyIndex).setCellValue(dataObj.getString(key));
+                dataKeyIndex++;
+            }
+        }
+
+        CellRangeAddress region = new CellRangeAddress(0, 0, 0, 6);
+        sheet.addMergedRegion(region);
+    }
+
+    public RestTemplate getRestTemplate() {
+        return restTemplate;
+    }
+
+    public void setRestTemplate(RestTemplate restTemplate) {
+        this.restTemplate = restTemplate;
+    }
+}