java110 лет назад: 5
Родитель
Сommit
769b8d3dbc

+ 20 - 0
java110-bean/src/main/java/com/java110/entity/assetImport/ImportRoomFee.java

@@ -11,6 +11,10 @@ public class ImportRoomFee {
 
 
     private String roomNum;
     private String roomNum;
 
 
+    private String carNum;
+
+    private String carId;
+
     private String feeName;
     private String feeName;
 
 
     private String startTime;
     private String startTime;
@@ -124,4 +128,20 @@ public class ImportRoomFee {
     public void setCreateTime(String createTime) {
     public void setCreateTime(String createTime) {
         this.createTime = createTime;
         this.createTime = createTime;
     }
     }
+
+    public String getCarNum() {
+        return carNum;
+    }
+
+    public void setCarNum(String carNum) {
+        this.carNum = carNum;
+    }
+
+    public String getCarId() {
+        return carId;
+    }
+
+    public void setCarId(String carId) {
+        this.carId = carId;
+    }
 }
 }

+ 27 - 0
java110-bean/src/main/java/com/java110/po/importFeeDetail/ImportFeeDetailPo.java

@@ -17,6 +17,9 @@ public class ImportFeeDetailPo implements Serializable {
     private String endTime;
     private String endTime;
     private String state;
     private String state;
     private String communityId;
     private String communityId;
+    private String objId;
+    private String objName;
+    private String objType;
 
 
     private String importFeeId;
     private String importFeeId;
     private String remark;
     private String remark;
@@ -140,4 +143,28 @@ public class ImportFeeDetailPo implements Serializable {
     public void setRemark(String remark) {
     public void setRemark(String remark) {
         this.remark = remark;
         this.remark = remark;
     }
     }
+
+    public String getObjId() {
+        return objId;
+    }
+
+    public void setObjId(String objId) {
+        this.objId = objId;
+    }
+
+    public String getObjName() {
+        return objName;
+    }
+
+    public void setObjName(String objName) {
+        this.objName = objName;
+    }
+
+    public String getObjType() {
+        return objType;
+    }
+
+    public void setObjType(String objType) {
+        this.objType = objType;
+    }
 }
 }

+ 24 - 5
java110-db/src/main/resources/mapper/fee/ImportFeeDetailServiceDaoImplMapper.xml

@@ -9,10 +9,10 @@
     <insert id="saveImportFeeDetailInfo" parameterType="Map">
     <insert id="saveImportFeeDetailInfo" parameterType="Map">
         insert into import_fee_detail(
         insert into import_fee_detail(
         amount,unit_num,fee_id,floor_num,room_id,room_num,ifd_id,fee_name,start_time,
         amount,unit_num,fee_id,floor_num,room_id,room_num,ifd_id,fee_name,start_time,
-        end_time,state,community_id,import_fee_id,remark
+        end_time,state,community_id,import_fee_id,remark,obj_id,obj_name,obj_type
         ) values (
         ) values (
         #{amount},#{unitNum},#{feeId},#{floorNum},#{roomId},#{roomNum},#{ifdId},#{feeName},#{startTime},
         #{amount},#{unitNum},#{feeId},#{floorNum},#{roomId},#{roomNum},#{ifdId},#{feeName},#{startTime},
-        #{endTime},#{state},#{communityId},#{importFeeId},#{remark}
+        #{endTime},#{state},#{communityId},#{importFeeId},#{remark},#{objId},#{objName},#{objType}
         )
         )
     </insert>
     </insert>
 
 
@@ -23,7 +23,7 @@
         feeId,t.floor_num,t.floor_num floorNum,t.room_id,t.room_id roomId,t.room_num,t.room_num
         feeId,t.floor_num,t.floor_num floorNum,t.room_id,t.room_id roomId,t.room_num,t.room_num
         roomNum,t.ifd_id,t.ifd_id ifdId,t.fee_name,t.fee_name feeName,t.start_time,t.start_time
         roomNum,t.ifd_id,t.ifd_id ifdId,t.fee_name,t.fee_name feeName,t.start_time,t.start_time
         startTime,t.end_time,t.end_time endTime,t.state,t.community_id,t.community_id communityId,
         startTime,t.end_time,t.end_time endTime,t.state,t.community_id,t.community_id communityId,
-        t.remark
+        t.remark,t.obj_id objId,t.obj_name objName,t.obj_type objType
         from import_fee_detail t
         from import_fee_detail t
         where 1 =1
         where 1 =1
         <if test="amount !=null and amount != ''">
         <if test="amount !=null and amount != ''">
@@ -68,6 +68,15 @@
         <if test="importFeeId !=null and importFeeId != ''">
         <if test="importFeeId !=null and importFeeId != ''">
             and t.import_fee_id= #{importFeeId}
             and t.import_fee_id= #{importFeeId}
         </if>
         </if>
+        <if test="objId !=null and objId != ''">
+            and t.obj_id= #{objId}
+        </if>
+        <if test="objName !=null and objName != ''">
+            and t.obj_name= #{objName}
+        </if>
+        <if test="objType !=null and objType != ''">
+            and t.obj_type= #{objType}
+        </if>
         order by t.create_time desc
         order by t.create_time desc
         <if test="page != -1 and page != null ">
         <if test="page != -1 and page != null ">
             limit #{page}, #{row}
             limit #{page}, #{row}
@@ -169,6 +178,15 @@
         <if test="importFeeId !=null and importFeeId != ''">
         <if test="importFeeId !=null and importFeeId != ''">
             and t.import_fee_id= #{importFeeId}
             and t.import_fee_id= #{importFeeId}
         </if>
         </if>
+        <if test="objId !=null and objId != ''">
+            and t.obj_id= #{objId}
+        </if>
+        <if test="objName !=null and objName != ''">
+            and t.obj_name= #{objName}
+        </if>
+        <if test="objType !=null and objType != ''">
+            and t.obj_type= #{objType}
+        </if>
 
 
 
 
     </select>
     </select>
@@ -179,11 +197,12 @@
     <insert id="saveImportFeeDetails" parameterType="Map">
     <insert id="saveImportFeeDetails" parameterType="Map">
         insert into import_fee_detail(
         insert into import_fee_detail(
         amount,unit_num,fee_id,floor_num,room_id,room_num,ifd_id,fee_name,start_time,
         amount,unit_num,fee_id,floor_num,room_id,room_num,ifd_id,fee_name,start_time,
-        end_time,state,community_id,import_fee_id,remark
+        end_time,state,community_id,import_fee_id,remark,obj_id,obj_name,obj_type
         ) values
         ) values
         <foreach collection="importFeeDetailPos" item="item" separator=",">
         <foreach collection="importFeeDetailPos" item="item" separator=",">
           (#{item.amount},#{item.unitNum},#{item.feeId},#{item.floorNum},#{item.roomId},#{item.roomNum},#{item.ifdId},#{item.feeName},
           (#{item.amount},#{item.unitNum},#{item.feeId},#{item.floorNum},#{item.roomId},#{item.roomNum},#{item.ifdId},#{item.feeName},
-            #{item.startTime},#{item.endTime},#{item.state},#{item.communityId},#{item.importFeeId},#{item.remark})
+            #{item.startTime},#{item.endTime},#{item.state},#{item.communityId},#{item.importFeeId},#{item.remark}),
+            #{item.objId},#{item.objName},#{item.objType})
         </foreach>
         </foreach>
     </insert>
     </insert>
 
 

+ 4 - 0
java110-interface/src/main/java/com/java110/intf/user/IOwnerCarInnerServiceSMO.java

@@ -2,6 +2,7 @@ package com.java110.intf.user;
 
 
 import com.java110.config.feign.FeignConfiguration;
 import com.java110.config.feign.FeignConfiguration;
 import com.java110.dto.owner.OwnerCarDto;
 import com.java110.dto.owner.OwnerCarDto;
+import com.java110.entity.assetImport.ImportRoomFee;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -39,4 +40,7 @@ public interface IOwnerCarInnerServiceSMO {
      */
      */
     @RequestMapping(value = "/queryOwnerCarsCount", method = RequestMethod.POST)
     @RequestMapping(value = "/queryOwnerCarsCount", method = RequestMethod.POST)
     int queryOwnerCarsCount(@RequestBody OwnerCarDto ownerCarDto);
     int queryOwnerCarsCount(@RequestBody OwnerCarDto ownerCarDto);
+
+    @RequestMapping(value = "/freshCarIds", method = RequestMethod.POST)
+    List<ImportRoomFee> freshCarIds(@RequestBody List<ImportRoomFee> tmpImportCarFees);
 }
 }

+ 5 - 3
service-api/src/main/java/com/java110/api/listener/owner/QueryOwnerCarsListener.java

@@ -97,9 +97,11 @@ public class QueryOwnerCarsListener extends AbstractServiceApiDataFlowListener {
         if (total > 0) {
         if (total > 0) {
             ownerCarDtoList = ownerCarInnerServiceSMOImpl.queryOwnerCars(BeanConvertUtil.covertBean(reqJson, OwnerCarDto.class));
             ownerCarDtoList = ownerCarInnerServiceSMOImpl.queryOwnerCars(BeanConvertUtil.covertBean(reqJson, OwnerCarDto.class));
 
 
-            freshPs(ownerCarDtoList);
-
-            freshRoomInfo(ownerCarDtoList);
+            //小区20条时刷房屋和车位信息
+            if (row < 20) {
+                freshPs(ownerCarDtoList);
+                freshRoomInfo(ownerCarDtoList);
+            }
         } else {
         } else {
             ownerCarDtoList = new ArrayList<>();
             ownerCarDtoList = new ArrayList<>();
         }
         }

+ 2 - 2
service-common/src/main/resources/java110.properties

@@ -7,8 +7,8 @@ java110.ftp.multipart.maxFileSize=100Mb
 java110.ftp.multipart.maxRequestSize=100Mb
 java110.ftp.multipart.maxRequestSize=100Mb
 
 
 #ftp use
 #ftp use
-java110.ftpServer = 192.168.0.104
+java110.ftpServer = 121.4.123.73
 java110.ftpPort = 6069
 java110.ftpPort = 6069
-java110.ftpUserName = uftp
+java110.ftpUserName = hcftpimportRoomFee
 java110.ftpUserPassword = 123456
 java110.ftpUserPassword = 123456
 java110.ftpPath = hc/
 java110.ftpPath = hc/

+ 19 - 0
service-fee/src/main/java/com/java110/fee/api/FeeApi.java

@@ -271,4 +271,23 @@ public class FeeApi extends BaseController {
         return importRoomFeeImpl.importFee(reqJson);
         return importRoomFeeImpl.importFee(reqJson);
     }
     }
 
 
+    /**
+     * 车辆费用导入
+     *
+     * path /app/feeApi/importCarFees
+     * @param reqString
+     * @return
+     */
+    @RequestMapping(value = "/importCarFees", method = RequestMethod.POST)
+    public ResponseEntity<String> importCarFees(@RequestBody String reqString) {
+
+        JSONObject reqJson = JSONObject.parseObject(reqString);
+        Assert.hasKeyAndValue(reqJson, "communityId", "未包含小区信息");
+        Assert.hasKeyAndValue(reqJson, "feeTypeCd", "未包含费用类型");
+        Assert.hasKeyAndValue(reqJson, "storeId", "未包含商户信息");
+        Assert.hasKeyAndValue(reqJson, "userId", "未包含用户信息");
+
+        return importRoomFeeImpl.importCarFee(reqJson);
+    }
+
 }
 }

+ 7 - 0
service-fee/src/main/java/com/java110/fee/bmo/IImportRoomFee.java

@@ -14,4 +14,11 @@ public interface IImportRoomFee {
      * @return
      * @return
      */
      */
     ResponseEntity<String> importFee(JSONObject reqJson);
     ResponseEntity<String> importFee(JSONObject reqJson);
+
+    /**
+     * 车辆费用导入
+     * @param reqJson
+     * @return
+     */
+    ResponseEntity<String> importCarFee(JSONObject reqJson);
 }
 }

+ 148 - 1
service-fee/src/main/java/com/java110/fee/bmo/impl/ImportRoomFeeImpl.java

@@ -12,7 +12,13 @@ import com.java110.entity.assetImport.ImportRoomFee;
 import com.java110.fee.bmo.IImportRoomFee;
 import com.java110.fee.bmo.IImportRoomFee;
 import com.java110.fee.listener.fee.UpdateFeeInfoListener;
 import com.java110.fee.listener.fee.UpdateFeeInfoListener;
 import com.java110.intf.community.IRoomInnerServiceSMO;
 import com.java110.intf.community.IRoomInnerServiceSMO;
-import com.java110.intf.fee.*;
+import com.java110.intf.fee.IFeeAttrInnerServiceSMO;
+import com.java110.intf.fee.IFeeConfigInnerServiceSMO;
+import com.java110.intf.fee.IFeeDetailInnerServiceSMO;
+import com.java110.intf.fee.IFeeInnerServiceSMO;
+import com.java110.intf.fee.IImportFeeDetailInnerServiceSMO;
+import com.java110.intf.fee.IImportFeeInnerServiceSMO;
+import com.java110.intf.user.IOwnerCarInnerServiceSMO;
 import com.java110.po.fee.FeeAttrPo;
 import com.java110.po.fee.FeeAttrPo;
 import com.java110.po.fee.PayFeeConfigPo;
 import com.java110.po.fee.PayFeeConfigPo;
 import com.java110.po.fee.PayFeePo;
 import com.java110.po.fee.PayFeePo;
@@ -66,6 +72,9 @@ public class ImportRoomFeeImpl implements IImportRoomFee {
     @Autowired
     @Autowired
     private IImportFeeInnerServiceSMO importFeeInnerServiceSMOImpl;
     private IImportFeeInnerServiceSMO importFeeInnerServiceSMOImpl;
 
 
+    @Autowired
+    private IOwnerCarInnerServiceSMO ownerCarInnerServiceSMOImpl;
+
     /**
     /**
      * 欠费缴费
      * 欠费缴费
      *
      *
@@ -162,6 +171,9 @@ public class ImportRoomFeeImpl implements IImportRoomFee {
             importFeeDetailPo.setUnitNum(importRoomFee.getUnitNum());
             importFeeDetailPo.setUnitNum(importRoomFee.getUnitNum());
             importFeeDetailPo.setRoomNum(importRoomFee.getRoomNum());
             importFeeDetailPo.setRoomNum(importRoomFee.getRoomNum());
             importFeeDetailPo.setRoomId(importRoomFee.getRoomId());
             importFeeDetailPo.setRoomId(importRoomFee.getRoomId());
+            importFeeDetailPo.setObjId(importRoomFee.getRoomId());
+            importFeeDetailPo.setObjType(FeeDto.PAYER_OBJ_TYPE_ROOM);
+            importFeeDetailPo.setObjName(importRoomFee.getFloorNum() + "栋" + importRoomFee.getUnitNum() + "单元" + importRoomFee.getRoomNum() + "室");
             importFeeDetailPo.setStartTime(importRoomFee.getStartTime());
             importFeeDetailPo.setStartTime(importRoomFee.getStartTime());
             importFeeDetailPo.setIfdId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_IfdId));
             importFeeDetailPo.setIfdId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_IfdId));
             importFeeDetailPo.setState("1000");
             importFeeDetailPo.setState("1000");
@@ -199,6 +211,141 @@ public class ImportRoomFeeImpl implements IImportRoomFee {
         return ResultVo.createResponseEntity(data);
         return ResultVo.createResponseEntity(data);
     }
     }
 
 
+    /**
+     * 车辆费用导入
+     *
+     * @param reqJson
+     * @return
+     */
+    @Override
+    @Java110Transactional
+    public ResponseEntity<String> importCarFee(JSONObject reqJson) {
+
+        int successCount = 0;
+        int errorCount = 0;
+
+        //小区ID
+        String communityId = reqJson.getString("communityId");
+        String importFeeId = reqJson.getString("importFeeId");
+        String feeTypeCd = reqJson.getString("feeTypeCd");//费用大类
+        String storeId = reqJson.getString("storeId");
+        String userId = reqJson.getString("userId");
+
+        FeeConfigDto feeConfigDto = new FeeConfigDto();
+        feeConfigDto.setFeeTypeCd(feeTypeCd);
+        feeConfigDto.setFeeName(IMPORT_FEE_NAME);
+        feeConfigDto.setCommunityId(communityId);
+        List<FeeConfigDto> feeConfigDtos = feeConfigInnerServiceSMOImpl.queryFeeConfigs(feeConfigDto);
+        // 根据费用大类 判断是否有存在 费用导入收入项
+        if (feeConfigDtos == null || feeConfigDtos.size() < 1) {
+            //生成导入费
+            feeConfigDto.setConfigId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_configId));
+            saveFeeConfig(feeConfigDto);
+        } else {
+            feeConfigDto.setConfigId(feeConfigDtos.get(0).getConfigId());
+        }
+
+
+        JSONArray importCarFees = reqJson.getJSONArray("importCarFees");
+
+        List<ImportRoomFee> tmpImportCarFees = importCarFees.toJavaList(ImportRoomFee.class);
+
+        for (ImportRoomFee tmpImportCarFee : tmpImportCarFees) {
+            tmpImportCarFee.setCommunityId(communityId);
+        }
+
+        Assert.isNotNull(tmpImportCarFees, "参数错误,未包含处理费用");
+
+        tmpImportCarFees = ownerCarInnerServiceSMOImpl.freshCarIds(tmpImportCarFees);
+
+        List<PayFeePo> payFeePos = new ArrayList<>();
+        List<FeeAttrPo> feeAttrPos = new ArrayList<>();
+        List<ImportFeeDetailPo> importFeeDetailPos = new ArrayList<>();
+        PayFeePo payFeePo = null;
+        ImportFeeDetailPo importFeeDetailPo = null;
+        for (ImportRoomFee importCarFee : tmpImportCarFees) {
+            if (StringUtil.isEmpty(importCarFee.getCarId()) || importCarFee.getCarId().startsWith("-") ||
+                    StringUtil.isEmpty(importCarFee.getCarNum()) || importCarFee.getCarNum().startsWith("-")
+            ) {
+                errorCount++;
+                continue;
+            }
+            successCount++;
+            payFeePo = new PayFeePo();
+            payFeePo.setFeeId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
+            payFeePo.setEndTime(importCarFee.getStartTime());
+            payFeePo.setState(FeeDto.STATE_DOING);
+            payFeePo.setCommunityId(communityId);
+            payFeePo.setConfigId(feeConfigDto.getConfigId());
+            payFeePo.setPayerObjId(importCarFee.getCarId());
+            payFeePo.setPayerObjType(FeeDto.PAYER_OBJ_TYPE_CAR);
+            payFeePo.setUserId(userId);
+            payFeePo.setIncomeObjId(storeId);
+            payFeePo.setFeeTypeCd(feeTypeCd);
+            payFeePo.setFeeFlag(FeeDto.FEE_FLAG_ONCE);
+            payFeePo.setAmount(importCarFee.getAmount());
+            //payFeePo.setStartTime(importRoomFee.getStartTime());
+            payFeePo.setStartTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+
+            payFeePos.add(payFeePo);
+
+            FeeAttrPo feeAttrPo = new FeeAttrPo();
+            feeAttrPo.setCommunityId(communityId);
+            feeAttrPo.setAttrId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_attrId));
+            feeAttrPo.setSpecCd(FeeAttrDto.SPEC_CD_IMPORT_FEE_NAME);
+            feeAttrPo.setValue(importCarFee.getFeeName());
+            feeAttrPo.setFeeId(payFeePo.getFeeId());
+            feeAttrPos.add(feeAttrPo);
+            importFeeDetailPo = new ImportFeeDetailPo();
+            importFeeDetailPo.setAmount(importCarFee.getAmount());
+            importFeeDetailPo.setCommunityId(communityId);
+            importFeeDetailPo.setEndTime(importCarFee.getEndTime());
+            importFeeDetailPo.setFeeId(payFeePo.getFeeId());
+            importFeeDetailPo.setFeeName(importCarFee.getFeeName());
+            importFeeDetailPo.setFloorNum("-");
+            importFeeDetailPo.setUnitNum("-");
+            importFeeDetailPo.setRoomNum("-");
+            importFeeDetailPo.setRoomId("-");
+            importFeeDetailPo.setObjId(importCarFee.getCarId());
+            importFeeDetailPo.setObjType(FeeDto.PAYER_OBJ_TYPE_CAR);
+            importFeeDetailPo.setObjName(importCarFee.getCarNum());
+            importFeeDetailPo.setStartTime(importCarFee.getStartTime());
+            importFeeDetailPo.setIfdId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_IfdId));
+            importFeeDetailPo.setState("1000");
+            importFeeDetailPo.setImportFeeId(importFeeId);
+            importFeeDetailPos.add(importFeeDetailPo);
+        }
+
+        feeInnerServiceSMOImpl.saveFee(payFeePos);
+
+        feeAttrInnerServiceSMOImpl.saveFeeAttrs(feeAttrPos);
+
+        ImportFeeDto importFeeDto = new ImportFeeDto();
+        importFeeDto.setCommunityId(communityId);
+        importFeeDto.setImportFeeId(importFeeId);
+
+        List<ImportFeeDto> importRoomFeess = importFeeInnerServiceSMOImpl.queryImportFees(importFeeDto);
+
+        if (importRoomFeess == null || importRoomFeess.size() < 1) {
+            //保存日志
+            ImportFeePo importFeePo = new ImportFeePo();
+            importFeePo.setCommunityId(communityId);
+            importFeePo.setFeeTypeCd(feeTypeCd);
+            importFeePo.setImportFeeId(importFeeId);
+            importFeeInnerServiceSMOImpl.saveImportFee(importFeePo);
+        }
+
+
+        importFeeDetailInnerServiceSMOImpl.saveImportFeeDetails(importFeeDetailPos);
+
+
+        JSONObject data = new JSONObject();
+        data.put("successCount", successCount);
+        data.put("errorCount", errorCount);
+
+        return ResultVo.createResponseEntity(data);
+    }
+
     /**
     /**
      * 保存保存导入费用配置
      * 保存保存导入费用配置
      *
      *

+ 65 - 0
service-front/src/main/java/com/java110/front/smo/assetExport/impl/ExportRoomSMOImpl.java

@@ -95,6 +95,41 @@ public class ExportRoomSMOImpl extends BaseComponentSMO implements IExportRoomSM
      * @param workbook
      * @param workbook
      */
      */
     private void getCars(IPageData pd, ComponentValidateResult result, Workbook workbook) {
     private void getCars(IPageData pd, ComponentValidateResult result, Workbook workbook) {
+        Sheet sheet = workbook.createSheet("车位费用信息");
+        Row row = sheet.createRow(0);
+        Cell cell0 = row.createCell(0);
+        cell0.setCellValue("费用名称: 请填写系统中费用类型,如停车费等 ;\n开始时间: " +
+                "收费开始时间,格式为YYYY-MM-DD;\n结束时间: 费用结束时间,格式为YYYY-MM-DD; \n收费金额: 本次收取金额 单位元; " +
+                "\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("收费金额");
+
+        //查询楼栋信息
+        JSONArray cars = this.getExistsCars(pd, result);
+        if (cars == null) {
+            CellRangeAddress region = new CellRangeAddress(0, 0, 0, 6);
+            sheet.addMergedRegion(region);
+            return;
+        }
+        for (int carIndex = 0; carIndex < cars.size(); carIndex++) {
+            row = sheet.createRow(carIndex + 2);
+            row.createCell(0).setCellValue(cars.getJSONObject(carIndex).getString("carNum"));
+            row.createCell(1).setCellValue("");
+            row.createCell(2).setCellValue("");
+            row.createCell(3).setCellValue("");
+            row.createCell(4).setCellValue("");
+        }
+
+        CellRangeAddress region = new CellRangeAddress(0, 0, 0, 6);
+        sheet.addMergedRegion(region);
     }
     }
 
 
 
 
@@ -128,6 +163,36 @@ public class ExportRoomSMOImpl extends BaseComponentSMO implements IExportRoomSM
 
 
     }
     }
 
 
+    /**
+     * 查询存在的房屋信息
+     * room.queryRooms
+     *
+     * @param pd
+     * @param result
+     * @return
+     */
+    private JSONArray getExistsCars(IPageData pd, ComponentValidateResult result) {
+        String apiUrl = "";
+        ResponseEntity<String> responseEntity = null;
+        apiUrl = ServiceConstant.SERVICE_API_URL + "/api/owner.queryOwnerCars?page=1&row=10000&communityId=" + result.getCommunityId();
+        responseEntity = this.callCenterService(restTemplate, pd, "", apiUrl, HttpMethod.GET);
+
+        if (responseEntity.getStatusCode() != HttpStatus.OK) { //跳过 保存单元信息
+            return null;
+        }
+
+        JSONObject savedCarInfoResults = JSONObject.parseObject(responseEntity.getBody());
+
+
+        if (!savedCarInfoResults.containsKey("data")) {
+            return null;
+        }
+
+
+        return savedCarInfoResults.getJSONArray("data");
+
+    }
+
 
 
     private JSONArray getExistsUnit(IPageData pd, ComponentValidateResult result, String floorId) {
     private JSONArray getExistsUnit(IPageData pd, ComponentValidateResult result, String floorId) {
         String apiUrl = "";
         String apiUrl = "";

+ 155 - 6
service-front/src/main/java/com/java110/front/smo/assetImport/impl/ImportRoomFeeSMOImpl.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.java110.core.component.BaseComponentSMO;
 import com.java110.core.component.BaseComponentSMO;
 import com.java110.core.context.IPageData;
 import com.java110.core.context.IPageData;
 import com.java110.core.factory.GenerateCodeFactory;
 import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.fee.FeeDto;
 import com.java110.entity.assetImport.ImportRoomFee;
 import com.java110.entity.assetImport.ImportRoomFee;
 import com.java110.entity.component.ComponentValidateResult;
 import com.java110.entity.component.ComponentValidateResult;
 import com.java110.front.smo.assetImport.IImportRoomFeeSMO;
 import com.java110.front.smo.assetImport.IImportRoomFeeSMO;
@@ -54,16 +55,27 @@ public class ImportRoomFeeSMOImpl extends BaseComponentSMO implements IImportRoo
         try {
         try {
             ComponentValidateResult result = this.validateStoreStaffCommunityRelationship(pd, restTemplate);
             ComponentValidateResult result = this.validateStoreStaffCommunityRelationship(pd, restTemplate);
 
 
+            JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+            Assert.hasKeyAndValue(paramIn, "communityId", "请求中未包含小区");
+            Assert.hasKeyAndValue(paramIn, "objType", "请求中未包含费用对象");
+
             //InputStream is = uploadFile.getInputStream();
             //InputStream is = uploadFile.getInputStream();
 
 
             Workbook workbook = ImportExcelUtils.createWorkbook(uploadFile);  //工作簿
             Workbook workbook = ImportExcelUtils.createWorkbook(uploadFile);  //工作簿
 
 
-            List<ImportRoomFee> rooms = new ArrayList<ImportRoomFee>();
-
-            //获取楼信息
-            getRooms(workbook, rooms);
-            // 保存数据
-            return dealExcelData(pd, rooms, result);
+            if (FeeDto.PAYER_OBJ_TYPE_ROOM.equals(paramIn.getString("objType"))) {
+                List<ImportRoomFee> rooms = new ArrayList<ImportRoomFee>();
+                //获取楼信息
+                getRooms(workbook, rooms);
+                // 保存数据
+                return dealExcelData(pd, rooms, result);
+            }else{
+                List<ImportRoomFee> cars = new ArrayList<ImportRoomFee>();
+                //获取楼信息
+                getCars(workbook, cars);
+                // 保存数据
+                return dealExcelCarData(pd, cars, result);
+            }
         } catch (Exception e) {
         } catch (Exception e) {
             logger.error("导入失败 ", e);
             logger.error("导入失败 ", e);
             return new ResponseEntity<String>("非常抱歉,您填写的模板数据有误:" + e.getMessage(), HttpStatus.BAD_REQUEST);
             return new ResponseEntity<String>("非常抱歉,您填写的模板数据有误:" + e.getMessage(), HttpStatus.BAD_REQUEST);
@@ -89,6 +101,25 @@ public class ImportRoomFeeSMOImpl extends BaseComponentSMO implements IImportRoo
 
 
         return responseEntity;
         return responseEntity;
     }
     }
+    /**
+     * 处理ExcelData数据
+     *
+     * @param roomFees 房屋费用
+     */
+    private ResponseEntity<String> dealExcelCarData(IPageData pd,
+                                                 List<ImportRoomFee> roomFees,
+
+                                                 ComponentValidateResult result) {
+        ResponseEntity<String> responseEntity = null;
+        //保存单元信息 和 楼栋信息
+        responseEntity = savedCarFees(pd, roomFees, result);
+
+        if (responseEntity == null || responseEntity.getStatusCode() != HttpStatus.OK) {
+            return responseEntity;
+        }
+
+        return responseEntity;
+    }
 
 
     private ResponseEntity<String> savedRoomFees(IPageData pd, List<ImportRoomFee> roomFees, ComponentValidateResult result) {
     private ResponseEntity<String> savedRoomFees(IPageData pd, List<ImportRoomFee> roomFees, ComponentValidateResult result) {
 
 
@@ -121,6 +152,37 @@ public class ImportRoomFeeSMOImpl extends BaseComponentSMO implements IImportRoo
         return ResultVo.createResponseEntity(ResultVo.CODE_OK, "成功:" + paramOut.getString("successCount") + ",失败:" + paramOut.getString("errorCount"));
         return ResultVo.createResponseEntity(ResultVo.CODE_OK, "成功:" + paramOut.getString("successCount") + ",失败:" + paramOut.getString("errorCount"));
     }
     }
 
 
+    private ResponseEntity<String> savedCarFees(IPageData pd, List<ImportRoomFee> carFees, ComponentValidateResult result) {
+
+        if (carFees.size() < 1) {
+            throw new IllegalArgumentException("没有数据需要处理");
+        }
+
+        JSONObject paramOut = new JSONObject();
+        paramOut.put("successCount", 0);
+        paramOut.put("errorCount", 0);
+
+        JSONObject data = JSONObject.parseObject(pd.getReqData());
+        data.put("storeId", result.getStoreId());
+        data.put("importFeeId", GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_feeId));
+        data.put("userId", result.getUserId());
+        data.put("communityId", result.getCommunityId());
+        List<ImportRoomFee> tmpImportCarFees = new ArrayList<>();
+        for (int carIndex = 0; carIndex < carFees.size(); carIndex++) {
+            tmpImportCarFees.add(carFees.get(carIndex));
+            if (carIndex % DEFAULT_ADD_FEE_COUNT == 0 && carIndex != 0) {
+                createCarFee(pd, tmpImportCarFees, data, paramOut);
+
+                tmpImportCarFees = new ArrayList<>();
+            }
+        }
+        if (tmpImportCarFees != null && tmpImportCarFees.size() > 0) {
+
+            createRoomFee(pd, tmpImportCarFees, data, paramOut);
+        }
+        return ResultVo.createResponseEntity(ResultVo.CODE_OK, "成功:" + paramOut.getString("successCount") + ",失败:" + paramOut.getString("errorCount"));
+    }
+
     /**
     /**
      * 创建费用
      * 创建费用
      *
      *
@@ -162,6 +224,47 @@ public class ImportRoomFeeSMOImpl extends BaseComponentSMO implements IImportRoo
         paramOut.put("errorCount", errorCount);
         paramOut.put("errorCount", errorCount);
     }
     }
 
 
+    /**
+     * 创建费用
+     *
+     * @param pd
+     * @param tmpImportCarFee
+     */
+    private void createCarFee(IPageData pd, List<ImportRoomFee> tmpImportCarFee, JSONObject data, JSONObject paramOut) {
+
+        int successCount = paramOut.getInteger("successCount");
+        int errorCount = paramOut.getInteger("errorCount");
+
+        JSONArray importCarFees = JSONArray.parseArray(JSONObject.toJSONString(tmpImportCarFee));
+        data.put("importCarFees", importCarFees);
+
+        String apiUrl = ServiceConstant.SERVICE_API_URL + "/api/feeApi/importCarFees";
+
+        ResponseEntity<String> responseEntity = this.callCenterService(restTemplate, pd, data.toJSONString(), apiUrl, HttpMethod.POST);
+
+        if (HttpStatus.OK != responseEntity.getStatusCode()) {
+            errorCount += tmpImportCarFee.size();
+            paramOut.put("errorCount", errorCount);
+            return;
+        }
+
+        JSONObject resOut = JSONObject.parseObject(responseEntity.getBody());
+
+        if (ResultVo.CODE_OK != resOut.getInteger("code")) {
+            errorCount += tmpImportCarFee.size();
+            paramOut.put("errorCount", errorCount);
+            return;
+        }
+
+        JSONObject resData = resOut.getJSONObject("data");
+
+        successCount += resData.getInteger("successCount");
+        errorCount += resData.getInteger("errorCount");
+
+        paramOut.put("successCount", successCount);
+        paramOut.put("errorCount", errorCount);
+    }
+
 
 
     /**
     /**
      * 获取 房屋信息
      * 获取 房屋信息
@@ -214,6 +317,52 @@ public class ImportRoomFeeSMOImpl extends BaseComponentSMO implements IImportRoo
         }
         }
     }
     }
 
 
+    /**
+     * 获取 房屋信息
+     *
+     * @param workbook
+     * @param cars
+     */
+    private void getCars(Workbook workbook, List<ImportRoomFee> cars) {
+        Sheet sheet = null;
+        sheet = ImportExcelUtils.getSheet(workbook, "车位费用信息");
+        List<Object[]> oList = ImportExcelUtils.listFromSheet(sheet);
+        ImportRoomFee importRoomFee = null;
+        for (int osIndex = 0; osIndex < oList.size(); osIndex++) {
+            Object[] os = oList.get(osIndex);
+            if (osIndex == 0 || osIndex == 1) { // 第一行是 头部信息 直接跳过
+                continue;
+            }
+            if (StringUtil.isNullOrNone(os[0])) {
+                continue;
+            }
+
+            //费用名称没有填写,默认跳过
+            if (StringUtil.isNullOrNone(os[1])) {
+                continue;
+            }
+            Assert.hasValue(os[2], (osIndex + 1) + "行开始时间不能为空");
+            Assert.hasValue(os[3], (osIndex + 1) + "行结束时间不能为空");
+            Assert.hasValue(os[4], (osIndex + 1) + "行费用不能为空");
+
+//
+
+            String startTime = excelDoubleToDate(os[2].toString());
+            String endTime = excelDoubleToDate(os[3].toString());
+            Assert.isDate(startTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行开始时间格式错误 请填写YYYY-MM-DD 文本格式");
+            Assert.isDate(endTime, DateUtil.DATE_FORMATE_STRING_B, (osIndex + 1) + "行结束时间格式错误 请填写YYYY-MM-DD 文本格式");
+
+
+            importRoomFee = new ImportRoomFee();
+            importRoomFee.setCarNum(os[0].toString());
+            importRoomFee.setFeeName(os[1].toString());
+            importRoomFee.setStartTime(startTime);
+            importRoomFee.setEndTime(endTime);
+            importRoomFee.setAmount(os[4].toString());
+            cars.add(importRoomFee);
+        }
+    }
+
 
 
     //解析Excel日期格式
     //解析Excel日期格式
     public static String excelDoubleToDate(String strDate) {
     public static String excelDoubleToDate(String strDate) {

+ 36 - 4
service-user/src/main/java/com/java110/user/smo/impl/OwnerCarInnerServiceSMOImpl.java

@@ -1,20 +1,24 @@
 package com.java110.user.smo.impl;
 package com.java110.user.smo.impl;
 
 
 
 
-import com.java110.utils.util.BeanConvertUtil;
 import com.java110.core.base.smo.BaseServiceSMO;
 import com.java110.core.base.smo.BaseServiceSMO;
-import com.java110.intf.user.IOwnerCarInnerServiceSMO;
-import com.java110.intf.user.IUserInnerServiceSMO;
-import com.java110.dto.owner.OwnerCarDto;
 import com.java110.dto.PageDto;
 import com.java110.dto.PageDto;
+import com.java110.dto.owner.OwnerCarDto;
 import com.java110.dto.user.UserDto;
 import com.java110.dto.user.UserDto;
+import com.java110.entity.assetImport.ImportRoomFee;
+import com.java110.intf.user.IOwnerCarInnerServiceSMO;
+import com.java110.intf.user.IUserInnerServiceSMO;
 import com.java110.user.dao.IOwnerCarServiceDao;
 import com.java110.user.dao.IOwnerCarServiceDao;
+import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
+import java.util.Map;
 
 
 /**
 /**
  * @ClassName FloorInnerServiceSMOImpl
  * @ClassName FloorInnerServiceSMOImpl
@@ -83,6 +87,34 @@ public class OwnerCarInnerServiceSMOImpl extends BaseServiceSMO implements IOwne
         return ownerCarServiceDaoImpl.queryOwnerCarsCount(BeanConvertUtil.beanCovertMap(ownerCarDto));
         return ownerCarServiceDaoImpl.queryOwnerCarsCount(BeanConvertUtil.beanCovertMap(ownerCarDto));
     }
     }
 
 
+    @Override
+    public List<ImportRoomFee> freshCarIds(@RequestBody List<ImportRoomFee> tmpImportCarFees) {
+        List<String> carNums = new ArrayList<>();
+        for (ImportRoomFee importRoomFee : tmpImportCarFees) {
+            if (StringUtil.isEmpty(importRoomFee.getCarNum())) {
+                continue;
+            }
+            carNums.add(importRoomFee.getCarNum());
+        }
+
+        if (carNums.size() < 1) {
+            return tmpImportCarFees;
+        }
+        Map<String, Object> info = new HashMap<>();
+        info.put("carNums", carNums.toArray(new String[carNums.size()]));
+        info.put("communityId", tmpImportCarFees.get(0).getCommunityId());
+        List<OwnerCarDto> ownerCarDtos = BeanConvertUtil.covertBeanList(ownerCarServiceDaoImpl.getOwnerCarInfo(info), OwnerCarDto.class);
+
+        for (OwnerCarDto ownerCarDto : ownerCarDtos) {
+            for (ImportRoomFee importRoomFee : tmpImportCarFees) {
+                if (ownerCarDto.getNum().equals(importRoomFee.getCarNum())) {
+                    importRoomFee.setCarId(ownerCarDto.getCarId());
+                }
+            }
+        }
+        return tmpImportCarFees;
+    }
+
     public IOwnerCarServiceDao getOwnerCarServiceDaoImpl() {
     public IOwnerCarServiceDao getOwnerCarServiceDaoImpl() {
         return ownerCarServiceDaoImpl;
         return ownerCarServiceDaoImpl;
     }
     }