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 infos = null; if (total > 0) { infos = baseDataStatisticsInnerServiceSMOImpl.getParkingFeeSummaryData(reqJson); } else { infos = new ArrayList<>(); } //todo 计算每月情况 computeEveryMonthFee(infos, reqJson); //todo 计算小区和物业公司信息 computeCommunityAndProperty(infos); ResponseEntity responseEntity = ResultVo.createResponseEntity((int) Math.ceil((double) total / (double) row), total, infos); context.setResponseEntity(responseEntity); } private void computeCommunityAndProperty(List infos) { CommunityDto communityDto = new CommunityDto(); List communityDtos = communityV1InnerServiceSMOImpl.queryCommunityAndPropertys(communityDto); if (communityDtos == null || communityDtos.isEmpty()) { return; } //todo 查询 物业名称 StoreDto storeDto = new StoreDto(); storeDto.setStoreTypeCd(StoreDto.STORE_TYPE_PROPERTY); List 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 infos, JSONObject reqJson) { if (infos == null || infos.isEmpty()) { return; } List 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 monthDatas = baseDataStatisticsInnerServiceSMOImpl.computeEveryMonthFee(info); List months = null; for (Map roomInfo : infos) { months = new ArrayList<>(); for (Map monthInfo : monthDatas) { if (roomInfo.get("configId") == null || monthInfo.get("configId") == null) { continue; } if (roomInfo.get("carId").equals(monthInfo.get("roomId")) && roomInfo.get("configId").equals(monthInfo.get("configId"))) { months.add(monthInfo); } } roomInfo.put("monthData", months); } } }