java110-bean/src/main/java/com/java110/dto/fee/FeeDto.java
@@ -185,6 +185,8 @@ private String targetEndTime; private double[] report; public String getAmount() { return amount; } @@ -916,4 +918,12 @@ public void setContractFee(String contractFee) { this.contractFee = contractFee; } public double[] getReport() { return report; } public void setReport(double[] report) { this.report = report; } } java110-db/src/main/resources/mapper/fee/ReportFeeServiceDaoImplMapper.xml
@@ -6,9 +6,9 @@ SELECT pfd.community_id, td.name AS '费用类型名称', YEAR(pfd.create_time), YEAR(pfd.create_time) AS '统计周期', -- 统计周期只显示年份 pf.fee_type_cd AS '费用类型编码', -- 计算各年份的收费金额(按天数比例分配) -- 往年年度统计 SUM( CASE WHEN pfd.start_time < '2021-01-01' AND pfd.end_time >= '2020-01-01' @@ -64,17 +64,153 @@ ELSE 0 END ) AS '2024年收费金额(元)', -- 今年按月统计(2025年) SUM( CASE WHEN pfd.start_time < '2026-01-01' AND pfd.end_time >= '2025-01-01' WHEN pfd.start_time < '2025-02-01' AND pfd.end_time >= '2025-01-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, '2025-12-31'), LEAST(pfd.end_time, LAST_DAY('2025-01-01')), GREATEST(pfd.start_time, '2025-01-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年收费金额(元)', ) AS '2025年01月收费金额(元)', SUM( CASE WHEN pfd.start_time < '2025-03-01' AND pfd.end_time >= '2025-02-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, LAST_DAY('2025-02-01')), GREATEST(pfd.start_time, '2025-02-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年02月收费金额(元)', SUM( CASE WHEN pfd.start_time < '2025-04-01' AND pfd.end_time >= '2025-03-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, LAST_DAY('2025-03-01')), GREATEST(pfd.start_time, '2025-03-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年03月收费金额(元)', SUM( CASE WHEN pfd.start_time < '2025-05-01' AND pfd.end_time >= '2025-04-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, LAST_DAY('2025-04-01')), GREATEST(pfd.start_time, '2025-04-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年04月收费金额(元)', SUM( CASE WHEN pfd.start_time < '2025-06-01' AND pfd.end_time >= '2025-05-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, LAST_DAY('2025-05-01')), GREATEST(pfd.start_time, '2025-05-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年05月收费金额(元)', SUM( CASE WHEN pfd.start_time < '2025-07-01' AND pfd.end_time >= '2025-06-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, LAST_DAY('2025-06-01')), GREATEST(pfd.start_time, '2025-06-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年06月收费金额(元)', SUM( CASE WHEN pfd.start_time < '2025-08-01' AND pfd.end_time >= '2025-07-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, LAST_DAY('2025-07-01')), GREATEST(pfd.start_time, '2025-07-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年07月收费金额(元)', SUM( CASE WHEN pfd.start_time < '2025-09-01' AND pfd.end_time >= '2025-08-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, LAST_DAY('2025-08-01')), GREATEST(pfd.start_time, '2025-08-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年08月收费金额(元)', SUM( CASE WHEN pfd.start_time < '2025-10-01' AND pfd.end_time >= '2025-09-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, LAST_DAY('2025-09-01')), GREATEST(pfd.start_time, '2025-09-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年09月收费金额(元)', SUM( CASE WHEN pfd.start_time < '2025-11-01' AND pfd.end_time >= '2025-10-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, LAST_DAY('2025-10-01')), GREATEST(pfd.start_time, '2025-10-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年10月收费金额(元)', SUM( CASE WHEN pfd.start_time < '2025-12-01' AND pfd.end_time >= '2025-11-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, LAST_DAY('2025-11-01')), GREATEST(pfd.start_time, '2025-11-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年11月收费金额(元)', SUM( CASE WHEN pfd.start_time < '2026-01-01' AND pfd.end_time >= '2025-12-01' THEN pfd.received_amount * DATEDIFF( LEAST(pfd.end_time, LAST_DAY('2025-12-01')), GREATEST(pfd.start_time, '2025-12-01') ) / DATEDIFF(pfd.end_time, pfd.start_time) ELSE 0 END ) AS '2025年12月收费金额(元)', SUM(pfd.received_amount) AS '总收费金额(元)' FROM pay_fee_detail pfd @@ -83,11 +219,15 @@ AND td.table_columns = "fee_type_cd" AND td.status_cd = pf.fee_type_cd WHERE pfd.status_cd = '0' AND pfd.community_id = '2025081537770016' pfd.status_cd = '0' AND pfd.community_id = '2025081537770016' GROUP BY td.name, pf.fee_type_cd, pfd.community_id,YEAR(pfd.create_time) td.name, pf.fee_type_cd, pfd.community_id, YEAR(pfd.create_time) -- 按年份分组 ORDER BY td.name; td.name, YEAR(pfd.create_time); </select> </mapper> java110-db/src/main/resources/mapper/user/OwnerAppUserV1ServiceDaoImplMapper.xml
@@ -60,6 +60,12 @@ <if test="state !=null and state != ''"> and t.state= #{state} </if> <if test="states !=null"> and t.state in <foreach collection="states" item="item" open="(" close=")" separator=","> #{item} </foreach> </if> <if test="appUserId !=null and appUserId != ''"> and t.app_user_id= #{appUserId} </if> service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeCmd.java
@@ -6,7 +6,10 @@ import com.java110.core.event.cmd.Cmd; import com.java110.core.event.cmd.CmdEvent; import com.java110.dto.community.CommunityDto; import com.java110.dto.dict.DictDto; import com.java110.dto.fee.FeeDto; import com.java110.intf.community.ICommunityInnerServiceSMO; import com.java110.intf.dev.IDictV1InnerServiceSMO; import com.java110.intf.fee.IReportFeeInnerServiceSMO; import com.java110.po.fee.PayFeePo; import com.java110.utils.exception.CmdException; @@ -20,6 +23,7 @@ import java.math.BigDecimal; import java.text.ParseException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -31,6 +35,9 @@ @Autowired private ICommunityInnerServiceSMO communityInnerServiceSMOImpl; @Autowired private IDictV1InnerServiceSMO dictV1InnerServiceSMOImpl; @Override public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { @@ -48,16 +55,35 @@ feeQueryParams.setStartYear(startYear); int currentYear = java.time.Year.now().getValue(); feeQueryParams.setEndYear(currentYear + 2); List<Map> result = reportFeeInnerServiceSMOImpl.repostPaidInFee(feeQueryParams); int endYear = feeQueryParams.getEndYear(); double[][] reports = new double[22 * (endYear - startYear)][endYear - startYear + 1]; for(int j = 0 ; j < result.size() ; j++){ for (int i = startYear; i <= endYear; i++) { reports[j][i-startYear] = (double) result.get(j).get(i+"年收费金额(元)"); List<Map> result = reportFeeInnerServiceSMOImpl.repostPaidInFee(feeQueryParams); DictDto dictDto = new DictDto(); dictDto.setTableName("pay_fee_config"); dictDto.setTableColumns("fee_type_cd"); List<DictDto> dictDtos = dictV1InnerServiceSMOImpl.queryDicts(dictDto); int doYear = endYear - startYear; List<FeeDto> reportFeeDtos = new ArrayList<>(); for (int i = startYear; i <= endYear; i++) { for (Map map : result) { if (map.get("统计周期")!=null&&map.get("统计周期").equals(i)){ FeeDto feeDto = new FeeDto(); feeDto.setCurYear((i)+""); feeDto.setFeeTypeCdName(map.get("费用类型名称")+""); double[] doubles = new double[doYear]; for (int j = startYear ; j <= endYear ; j++) { if(map.get((j)+"年收费金额(元)")!=null){ doubles[j-startYear] = ((BigDecimal)map.get((j)+"年收费金额(元)")).doubleValue(); } } feeDto.setReport(doubles); reportFeeDtos.add(feeDto); } } } ResultVo resultVo = new ResultVo(reports); ResultVo resultVo = new ResultVo(reportFeeDtos); ResponseEntity<String> responseEntity = new ResponseEntity<String>(resultVo.toString(), HttpStatus.OK); service-user/src/main/java/com/java110/user/cmd/login/PhoneWechatLoginCmd.java
@@ -152,16 +152,13 @@ OwnerAppUserDto ownerAppUserDto = new OwnerAppUserDto(); ownerAppUserDto.setUserId(userDtos.get(0).getUserId()); ownerAppUserDto.setLink(userDtos.get(0).getTel()); ownerAppUserDto.setState(OwnerAppUserDto.STATE_AUDIT_SUCCESS); List<OwnerAppUserDto> ownerAppUserDtos = ownerAppUserV1InnerServiceSMOImpl.queryOwnerAppUsers(ownerAppUserDto); LoginOwnerResDto loginOwnerResDto = new LoginOwnerResDto(); if (ListUtil.isNull(ownerAppUserDtos)) { autoBindUserToOwner(userDtos.get(0), phoneNumber); loginOwnerResDto.setAuditState(userDtos.get(0).getAuditState()); communityId = smallWeChatDtos.get(0).getObjId(); } else { communityId = ownerAppUserDtos.get(0).getCommunityId(); loginOwnerResDto.setAuditState(ownerAppUserDtos.get(0).getState()); } CommunityDto communityDto = new CommunityDto(); @@ -187,6 +184,14 @@ loginOwnerResDto.setOwnerTel(tmpUserDto.getTel()); loginOwnerResDto.setToken(token); loginOwnerResDto.setKey(newKey); //查询认证关系 OwnerAppUserDto dto = new OwnerAppUserDto(); dto.setUserId(userDtos.get(0).getUserId()); dto.setLink(userDtos.get(0).getTel()); List<OwnerAppUserDto> dtos = ownerAppUserV1InnerServiceSMOImpl.queryOwnerAppUsers(dto); if(!CollectionUtils.isEmpty(dtos)){ } context.setResponseEntity(ResultVo.createResponseEntity(loginOwnerResDto)); } @@ -232,9 +237,6 @@ ownerAppUserPo.setUserId(userDto.getUserId()); ownerAppUserPo.setOpenId("-1"); ownerAppUserV1InnerServiceSMOImpl.saveOwnerAppUser(ownerAppUserPo); userDto.setAuditState(ownerAppUserPo.getState()); }else{ userDto.setAuditState(ownerAppUserDtos.get(0).getState()); } } service-user/src/main/java/com/java110/user/cmd/user/OwnerUserLoginCmd.java
@@ -146,11 +146,9 @@ OwnerAppUserDto ownerAppUserDto = new OwnerAppUserDto(); ownerAppUserDto.setUserId(userDtos.get(0).getUserId()); ownerAppUserDto.setLink(userDtos.get(0).getTel()); ownerAppUserDto.setState(OwnerAppUserDto.STATE_AUDIT_SUCCESS); List<OwnerAppUserDto> ownerAppUserDtos = ownerAppUserV1InnerServiceSMOImpl.queryOwnerAppUsers(ownerAppUserDto); LoginOwnerResDto loginOwnerResDto = new LoginOwnerResDto(); loginOwnerResDto.setAuditState(userDtos.get(0).getAuditState()); String communityId = ""; LoginOwnerResDto loginOwnerResDto = new LoginOwnerResDto(); if (!ListUtil.isNull(ownerAppUserDtos)) { // todo 4.0 查询小区是否存在 communityId = ownerAppUserDtos.get(0).getCommunityId(); @@ -171,7 +169,6 @@ //todo 生成登录token String token = generatorLoginToken(tmpUserDto); loginOwnerResDto.setCommunityId(communityDtos.get(0).getCommunityId()); loginOwnerResDto.setCommunityName(communityDtos.get(0).getName()); @@ -310,7 +307,6 @@ if (flag < 1) { throw new CmdException("添加用户业主关系失败"); } userDtos.get(0).setAuditState(ownerAppUserPo.getState()); } return userDtos; } service-user/src/main/java/com/java110/user/cmd/user/UserLoginCmd.java
@@ -156,6 +156,14 @@ tmpUserDto.setPassword(""); tmpUserDto.setToken(token); tmpUserDto.setKey(newKey); //查询认证关系 OwnerAppUserDto dto = new OwnerAppUserDto(); dto.setUserId(userDtos.get(0).getUserId()); dto.setLink(userDtos.get(0).getTel()); List<OwnerAppUserDto> dtos = ownerAppUserV1InnerServiceSMOImpl.queryOwnerAppUsers(dto); if(!CollectionUtils.isEmpty(dtos)){ tmpUserDto.setAuditState(dtos.get(0).getState()); } context.setResponseEntity(ResultVo.createResponseEntity(tmpUserDto)); } catch (Exception e) { logger.error("登录异常:", e); @@ -244,7 +252,6 @@ if (flag < 1) { throw new CmdException("添加用户业主关系失败"); } userDtos.get(0).setAuditState(ownerAppUserPo.getState()); } return userDtos; } springboot/src/main/resources/application.yml
@@ -1,6 +1,6 @@ spring: profiles: active: debug active: dev # docker build -t lx .