wuxw лет назад: 2
Родитель
Сommit
dc93b8c00d

+ 87 - 9
java110-db/src/main/resources/mapper/report/BaseDataStatisticsServiceDaoImplMapper.xml

@@ -479,6 +479,15 @@
         <if test="communityId != null and communityId != ''">
             and br.community_id = #{communityId}
         </if>
+        <if test="floorNum != null and floorNum != ''">
+            and f.floor_num = #{floorNum}
+        </if>
+        <if test="unitNum != null and unitNum != ''">
+            and bu.unit_num = #{unitNum}
+        </if>
+        <if test="roomNum != null and roomNum != ''">
+            and br.room_num = #{roomNum}
+        </if>
     </select>
 
     <select id="getPropertyFeeSummaryData" parameterType="Map" resultType="Map">
@@ -558,19 +567,88 @@
         <foreach collection="roomIds" item="item" open="(" close=")" separator=",">
             #{item}
         </foreach>
-        <if test="floorNum != null and floorNum != ''">
-            and f.floor_num = #{floorNum}
-        </if>
-        <if test="unitNum != null and unitNum != ''">
-            and bu.unit_num = #{unitNum}
-        </if>
-        <if test="roomNum != null and roomNum != ''">
-            and br.room_num = #{roomNum}
-        </if>
+
         and t.cur_month_time &gt;=#{startTime}
         and t.cur_month_time &lt; #{endTime}
         ) a
         group by a.obj_id,a.cur_month_time,a.config_id
     </select>
 
+    <select id="getParkingFeeSummaryDataCount" parameterType="Map" resultType="Map">
+        select count(1) count
+        from owner_car br
+        left join parking_space ps on br.ps_id = ps.ps_id and ps.status_cd = '0'
+        left join parking_area pa on ps.pa_id = ps.pa_id and pa.status_cd = '0'
+        left join building_owner bo on br.owner_id = bo.owner_id and bo.status_cd = '0' and bo.owner_type_cd = '1001'
+        left join pay_fee pf on br.car_id = pf.payer_obj_id and pf.payer_obj_type = '6666' and pf.status_cd = '0' and pf.fee_type_cd = '888800010008'
+        left join pay_fee_config pfc on pf.config_id = pfc.config_id and pfc.status_cd = '0' and pfc.fee_type_cd = '888800010008'
+        where br.status_cd = '0'
+        <if test="communityId != null and communityId != ''">
+            and br.community_id = #{communityId}
+        </if>
+        <if test="paNum != null and paNum != ''">
+            and pa.num = #{paNum}
+        </if>
+        <if test="psNum != null and psNum != ''">
+            and ps.num = #{psNum}
+        </if>
+        <if test="carNum != null and carNum != ''">
+            and br.car_num = #{carNum}
+        </if>
+    </select>
+
+    <select id="getParkingFeeSummaryData" parameterType="Map" resultType="Map">
+        select br.community_id communityId,bo.name ownerName,bo.sex,bo.link,concat(pa.num,'-',ps.num) parkingName,br.car_id carId,br.car_num carNum,
+        br.start_time bingTime,br.state,pfc.additional_amount squarePrice,pfc.config_id configId,pfc.fee_name feeName,
+        (
+        select max(pay_fee_time) from pay_fee_detail_month pfdm
+        where pfdm.config_id = pfc.config_id and pfdm.obj_id = br.car_id
+        and pfdm.status_cd = '0' and pfdm.detail_id != '-1'
+        and pfdm.cur_month_time &gt;=#{startTime} and pfdm.cur_month_time &lt; #{endTime}
+        ) payFeeTime,
+        (
+        select sum(pfdm.receivable_amount) from pay_fee_detail_month pfdm
+        where pfdm.config_id = pfc.config_id
+        and pfdm.obj_id = br.car_id
+        and pfdm.status_cd = '0' and pfdm.cur_month_time &gt;=#{startTime} and pfdm.cur_month_time &lt; #{endTime}
+        ) receivableAmount,
+        (
+        select sum(pfdm.received_amount) from pay_fee_detail_month pfdm
+        where pfdm.config_id = pfc.config_id and pfdm.obj_id = br.car_id
+        and pfdm.status_cd = '0' and pfdm.cur_month_time &gt;=#{startTime} and pfdm.cur_month_time &lt; #{endTime}
+        ) receivedAmount,
+        (
+        select sum(pfdm.receivable_amount) from pay_fee_detail_month pfdm
+        where pfdm.config_id = pfc.config_id and pfdm.obj_id = br.car_id
+        and pfdm.status_cd = '0' and pfdm.detail_id = '-1' and pfdm.cur_month_time &gt;=#{startTime} and pfdm.cur_month_time &lt; #{endTime}
+        ) oweAmount
+        from owner_car br
+        left join parking_space ps on br.ps_id = ps.ps_id and ps.status_cd = '0'
+        left join parking_area pa on ps.pa_id = ps.pa_id and pa.status_cd = '0'
+        left join building_owner bo on br.owner_id = bo.owner_id and bo.status_cd = '0' and bo.owner_type_cd = '1001'
+        left join pay_fee pf on br.car_id = pf.payer_obj_id and pf.payer_obj_type = '6666' and pf.status_cd = '0' and pf.fee_type_cd = '888800010008'
+        left join pay_fee_config pfc on pf.config_id = pfc.config_id and pfc.status_cd = '0' and pfc.fee_type_cd = '888800010008'
+        where br.status_cd = '0'
+        <if test="communityId != null and communityId != ''">
+            and br.community_id = #{communityId}
+        </if>
+        <if test="paNum != null and paNum != ''">
+            and pa.num = #{paNum}
+        </if>
+        <if test="psNum != null and psNum != ''">
+            and ps.num = #{psNum}
+        </if>
+        <if test="carNum != null and carNum != ''">
+            and br.car_num = #{carNum}
+        </if>
+        group by br.community_id ,bo.name ,bo.sex,bo.link,concat(pa.num,'-',ps.num) ,br.car_id ,br.car_num ,
+        br.start_time ,br.state,pfc.additional_amount ,pfc.config_id ,pfc.fee_name
+        order by br.community_id,pa.num,ps.num
+        <if test="page != -1 and page != null">
+            limit #{page},#{row}
+        </if>
+    </select>
+
+
+
 </mapper>

+ 6 - 0
java110-interface/src/main/java/com/java110/intf/report/IBaseDataStatisticsInnerServiceSMO.java

@@ -106,4 +106,10 @@ public interface IBaseDataStatisticsInnerServiceSMO {
 
     @RequestMapping(value = "/computeEveryMonthFee", method = RequestMethod.POST)
     List<Map> computeEveryMonthFee(@RequestBody Map info);
+
+    @RequestMapping(value = "/getParkingFeeSummaryDataCount", method = RequestMethod.POST)
+    int getParkingFeeSummaryDataCount(@RequestBody Map info);
+
+    @RequestMapping(value = "/getParkingFeeSummaryData", method = RequestMethod.POST)
+    List<Map> getParkingFeeSummaryData(@RequestBody Map info);
 }

+ 168 - 0
service-report/src/main/java/com/java110/report/cmd/admin/GetParkingFeeSummaryCmd.java

@@ -0,0 +1,168 @@
+package com.java110.report.cmd.admin;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.core.annotation.Java110Cmd;
+import com.java110.core.context.CmdContextUtils;
+import com.java110.core.context.ICmdDataFlowContext;
+import com.java110.core.event.cmd.Cmd;
+import com.java110.core.event.cmd.CmdEvent;
+import com.java110.dto.community.CommunityDto;
+import com.java110.dto.store.StoreDto;
+import com.java110.intf.community.ICommunityV1InnerServiceSMO;
+import com.java110.intf.report.IBaseDataStatisticsInnerServiceSMO;
+import com.java110.intf.store.IStoreInnerServiceSMO;
+import com.java110.intf.store.IStoreV1InnerServiceSMO;
+import com.java110.utils.exception.CmdException;
+import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+
+import java.text.ParseException;
+import java.util.*;
+
+/**
+ * 查询车位费台账
+ */
+@Java110Cmd(serviceCode = "admin.getParkingFeeSummary")
+public class GetParkingFeeSummaryCmd extends Cmd {
+
+    @Autowired
+    private IStoreInnerServiceSMO storeInnerServiceSMOImpl;
+
+    @Autowired
+    private IBaseDataStatisticsInnerServiceSMO baseDataStatisticsInnerServiceSMOImpl;
+
+
+    @Autowired
+    private ICommunityV1InnerServiceSMO communityV1InnerServiceSMOImpl;
+
+    @Autowired
+    private IStoreV1InnerServiceSMO storeV1InnerServiceSMOImpl;
+
+
+    @Override
+    public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+        super.validatePageInfo(reqJson);
+        String storeId = CmdContextUtils.getStoreId(context);
+
+        StoreDto storeDto = new StoreDto();
+        storeDto.setStoreId(storeId);
+        storeDto.setStoreTypeCd(StoreDto.STORE_TYPE_ADMIN);
+        int count = storeInnerServiceSMOImpl.getStoreCount(storeDto);
+        if (count < 1) {
+            throw new CmdException("非法操作,请用系统管理员账户操作");
+        }
+    }
+
+    @Override
+    public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException {
+
+        int row = reqJson.getIntValue("row");
+        Calendar calendar = Calendar.getInstance();
+        int year = calendar.get(Calendar.YEAR);
+
+        if(!reqJson.containsKey("startTime") || StringUtil.isEmpty(reqJson.getString("startTime"))){
+            reqJson.put("startTime", year + "-01-01");
+        }
+        if(!reqJson.containsKey("endTime") || StringUtil.isEmpty(reqJson.getString("endTime"))){
+            reqJson.put("endTime", (year + 1) + "-01-01");
+        }
+        //todo 查询房屋物业费信息
+        if(reqJson.containsKey("psName") && !StringUtil.isEmpty(reqJson.getString("psName"))){
+            String[] psNames = reqJson.getString("psName").split("-",2);
+            if(psNames.length != 2){
+                throw new CmdException("车位编号错误");
+            }
+            reqJson.put("paNum",psNames[0]);
+            reqJson.put("psNum",psNames[1]);
+        }
+
+
+
+        // todo 查询总数量
+        int total = baseDataStatisticsInnerServiceSMOImpl.getParkingFeeSummaryDataCount(reqJson);
+
+        List<Map> infos = null;
+        if (total > 0) {
+            infos = baseDataStatisticsInnerServiceSMOImpl.getParkingFeeSummaryData(reqJson);
+        } else {
+            infos = new ArrayList<>();
+        }
+
+        //todo 计算每月情况
+        computeEveryMonthFee(infos, reqJson);
+
+        //todo 计算小区和物业公司信息
+        computeCommunityAndProperty(infos);
+
+        ResponseEntity<String> responseEntity = ResultVo.createResponseEntity((int) Math.ceil((double) total / (double) row), total, infos);
+        context.setResponseEntity(responseEntity);
+
+    }
+
+    private void computeCommunityAndProperty(List<Map> infos) {
+
+        CommunityDto communityDto = new CommunityDto();
+        List<CommunityDto> communityDtos = communityV1InnerServiceSMOImpl.queryCommunityAndPropertys(communityDto);
+
+        if (communityDtos == null || communityDtos.isEmpty()) {
+            return;
+        }
+
+        //todo 查询 物业名称
+
+        StoreDto storeDto = new StoreDto();
+        storeDto.setStoreTypeCd(StoreDto.STORE_TYPE_PROPERTY);
+        List<StoreDto> storeDtos = storeV1InnerServiceSMOImpl.queryStores(storeDto);
+
+        for(CommunityDto tmpCommunityDto : communityDtos){
+            for(StoreDto tmpStoreDto: storeDtos){
+                if(tmpStoreDto.getStoreId().equals(tmpCommunityDto.getStoreId())){
+                    tmpCommunityDto.setStoreName(tmpStoreDto.getName());
+                }
+            }
+        }
+
+        for(Map info: infos){
+            for(CommunityDto tmpCommunityDto : communityDtos){
+                if(info.get("communityId").equals(tmpCommunityDto.getCommunityId())){
+                    info.put("communityName",tmpCommunityDto.getName());
+                    info.put("storeId",tmpCommunityDto.getStoreId());
+                    info.put("storeName",tmpCommunityDto.getStoreName());
+                }
+            }
+        }
+    }
+
+    private void computeEveryMonthFee(List<Map> infos, JSONObject reqJson) {
+        if (infos == null || infos.isEmpty()) {
+            return;
+        }
+
+        List<String> roomIds = new ArrayList<>();
+        for (Map info : infos) {
+            roomIds.add(info.get("carId").toString());
+        }
+
+        Map info = new HashMap();
+        info.put("roomIds", roomIds.toArray(new String[roomIds.size()]));
+        info.put("startTime", reqJson.getString("startTime"));
+        info.put("endTime", reqJson.getString("endTime"));
+
+        List<Map> monthDatas = baseDataStatisticsInnerServiceSMOImpl.computeEveryMonthFee(info);
+
+        List<Map> months = null;
+        for (Map roomInfo : infos) {
+            months = new ArrayList<>();
+            for (Map monthInfo : monthDatas) {
+                if (roomInfo.get("carId").equals(monthInfo.get("roomId"))
+                        && roomInfo.get("configId").equals(monthInfo.get("configId"))) {
+                    months.add(monthInfo);
+                }
+            }
+
+            roomInfo.put("monthData", months);
+        }
+    }
+}

+ 4 - 0
service-report/src/main/java/com/java110/report/dao/IBaseDataStatisticsServiceDao.java

@@ -77,4 +77,8 @@ public interface IBaseDataStatisticsServiceDao {
     int getPropertyFeeSummaryDataCount(Map info);
 
     List<Map> computeEveryMonthFee(Map info);
+
+    int getParkingFeeSummaryDataCount(Map info);
+
+    List<Map> getParkingFeeSummaryData(Map info);
 }

+ 15 - 0
service-report/src/main/java/com/java110/report/dao/impl/BaseDataStatisticsServiceDaoImpl.java

@@ -162,4 +162,19 @@ public class BaseDataStatisticsServiceDaoImpl extends BaseServiceDao implements
         List<Map> infos = sqlSessionTemplate.selectList("baseDataStatisticsServiceDaoImpl.computeEveryMonthFee", info);
         return infos;
     }
+
+    @Override
+    public int getParkingFeeSummaryDataCount(Map info) {
+        List<Map> infos = sqlSessionTemplate.selectList("baseDataStatisticsServiceDaoImpl.getParkingFeeSummaryDataCount", info);
+        if (infos.size() < 1) {
+            return 0;
+        }
+        return Integer.parseInt(infos.get(0).get("count").toString());
+    }
+
+    @Override
+    public List<Map> getParkingFeeSummaryData(Map info) {
+        List<Map> infos = sqlSessionTemplate.selectList("baseDataStatisticsServiceDaoImpl.getParkingFeeSummaryData", info);
+        return infos;
+    }
 }

+ 12 - 0
service-report/src/main/java/com/java110/report/smo/impl/BaseDataStatisticsInnerServiceSMOImpl.java

@@ -187,4 +187,16 @@ public class BaseDataStatisticsInnerServiceSMOImpl extends BaseServiceSMO implem
         List<Map> infos = baseDataStatisticsServiceDaoImpl.computeEveryMonthFee(info);
         return infos;
     }
+
+    @Override
+    public int getParkingFeeSummaryDataCount(@RequestBody Map info) {
+        int count = baseDataStatisticsServiceDaoImpl.getParkingFeeSummaryDataCount(info);
+        return count;
+    }
+
+    @Override
+    public List<Map> getParkingFeeSummaryData(@RequestBody Map info) {
+        List<Map> infos = baseDataStatisticsServiceDaoImpl.getParkingFeeSummaryData(info);
+        return infos;
+    }
 }