java110-bean/src/main/java/com/java110/dto/importData/ImportRoomFee.java
@@ -3,7 +3,7 @@ /** * 房屋费用导入对象 */ public class ImportRoomFee { public class ImportRoomFee implements Cloneable { private String payerObjName; @@ -35,6 +35,7 @@ private String contractId; private String state; private String cycle; private String remark; private String ownerId; @@ -376,4 +377,16 @@ } public String getState() { return state; } public void setState(String state) { this.state = state; } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); // 浅克隆,如果有引用类型字段可能需要深克隆 } } java110-bean/src/main/java/com/java110/dto/payFee/PayFeeAuditDto.java
@@ -37,7 +37,15 @@ private String bId; private String detailId; private String payOrderId; private String auditId; public String getAuditId() { return auditId; } public void setAuditId(String auditId) { this.auditId = auditId; } private Date createTime; java110-db/src/main/resources/mapper/fee/PayFeeAuditServiceDaoImplMapper.xml
@@ -16,7 +16,7 @@ select pf.payer_obj_id payerObjId,pf.payer_obj_type payerObjType,pfc.fee_name feeName, pfd.cycles,pfd.start_time startTime,pfd.end_time endTime,pfd.receivable_amount receivableAmount, pfd.received_amount receivedAmount,pfd.create_time createTime,pfa.state,pfa.message,pfd.remark, pfa.audit_user_name auditUserName,pfd.b_id bId,pf.fee_id feeId,pf.community_id communityId,pfd.detail_id pfa.audit_id auditId,pfa.audit_user_name auditUserName,pfd.b_id bId,pf.fee_id feeId,pf.community_id communityId,pfd.detail_id detailId, case when pfd.pay_order_id like '80%' @@ -41,7 +41,7 @@ where 1=1 and pfd.community_id = #{communityId} and pfd.status_cd = '0' and pfd.state = '1400' and pfd.state in ('1000','1200','1400','1600') <if test="roomId !=null and roomId != ''"> and pf.payer_obj_id = #{roomId} and pf.payer_obj_type = '3333' @@ -113,7 +113,7 @@ where 1=1 and pfd.community_id = #{communityId} and pfd.status_cd = '0' and pfd.state = '1400' and pfd.state in ('1000','1200','1400','1600') <if test="roomId !=null and roomId != ''"> and pf.payer_obj_id = #{roomId} and pf.payer_obj_type = '3333' java110-db/src/main/resources/mapper/user/MenuCatalogV1ServiceDaoImplMapper.xml
@@ -135,7 +135,7 @@ </if> WHERE mmg.group_type = #{groupType} and mmg.store_type= #{domain} and mmg.store_type= #{domain} and mm.is_show != 'N' <if test="caId !=null and caId != ''"> and mgc.ca_id = #{caId} </if> service-fee/src/main/java/com/java110/fee/cmd/fee/ReportFeeCmd.java
@@ -364,13 +364,13 @@ linkedList.add(feeDto1); reportFeeDtoLists.add(linkedList); } if (ind == 3){ if (ind == 2){ // fee.setCurYear("停车费合计(3+...+7)"); // fee.setReport(colByCar); // carFeeList.add(fee); reportFeeDtoLists.add(carFeeList); } if (ind == 8){ if (ind == 7){ // fee2.setCurYear("其他类合计(8+...+22)"); // fee2.setReport(colByOther); // otherFeeList.add(fee2); service-fee/src/main/java/com/java110/fee/cmd/returnPayFee/UpdateReturnPayFeeCmd.java
@@ -25,6 +25,7 @@ import com.java110.core.factory.CommunitySettingFactory; import com.java110.core.factory.GenerateCodeFactory; import com.java110.dto.fee.*; import com.java110.dto.payFee.PayFeeAuditDto; import com.java110.dto.room.RoomDto; import com.java110.dto.account.AccountDto; import com.java110.dto.wechat.OnlinePayDto; @@ -52,6 +53,7 @@ import com.java110.po.fee.FeeReceiptPo; import com.java110.po.fee.FeeReceiptDetailPo; import com.java110.po.onlinePayRefund.OnlinePayRefundPo; import com.java110.po.payFee.PayFeeAuditPo; import com.java110.po.wechat.OnlinePayPo; import com.java110.po.payFee.PayFeeDetailDiscountPo; import com.java110.po.payFee.ReturnPayFeePo; @@ -155,6 +157,9 @@ @Autowired private IPayFeeConfigV1InnerServiceSMO payFeeConfigV1InnerServiceSMOImpl; @Autowired private IPayFeeAuditInnerServiceSMO payFeeAuditInnerServiceSMOImpl; private static final String SPEC_RATE = "89002020980015"; //赠送月份 service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthHelp.java
@@ -170,9 +170,9 @@ payFeeDetailMonthInnerServiceSMOImpl.deletePayFeeDetailMonth(payFeeDetailMonthPo); // todo 费用已经结束 if (FeeDto.STATE_FINISH.equals(feeDto.getState())) { return; } // if (FeeDto.STATE_FINISH.equals(feeDto.getState())) { // return; // } List<PayFeeDetailMonthPo> payFeeDetailMonthPos = new ArrayList<>(); // todo 处理 开始时间和结束时间 service-fee/src/main/java/com/java110/fee/feeMonth/PayFeeMonthImpl.java
@@ -226,7 +226,7 @@ private void maxMonthDateToDeadlineTimeData(FeeDto feeDto, PayFeeMonthOwnerDto payFeeMonthOwnerDto, Double feePrice) { //todo 处理已经交过费的记录处理 // payFeeMonthHelp.waitDispersedFeeDetail(feeDto, payFeeMonthOwnerDto, feePrice); payFeeMonthHelp.waitDispersedFeeDetail(feeDto, payFeeMonthOwnerDto, feePrice); //todo 处理 endTime 到 deadlineTime 的费用 service-job/src/main/java/com/java110/job/export/adapt/ReportFeeAdapt.java
@@ -117,7 +117,7 @@ // cell.setCellStyle(dateStyle); } else { // 其他类型转为字符串 cell.setCellValue(value != null ? value.toString() : ""); cell.setCellValue(((Number) 0).doubleValue()); } } } @@ -286,13 +286,57 @@ private Object[][] createArr(ExportDataDto exportDataDto) { JSONObject reqJson = exportDataDto.getReqJson(); lastInd = 24 + (endYear - startYear); Object[][] arr = new Object[100 + 23 * (endYear - startYear)][lastInd]; Object[][] arr = new Object[19 * (endYear - startYear + 4) + 14][lastInd]; builderLine1(arr[0]); builderLine2(arr[1]); builderDun(arr); List<List<FeeDto>> reportFeeDtoLists = new LinkedList<>(); queryFee(reportFeeDtoLists ,reqJson); int ind = 0; for (int j = 0; j < reportFeeDtoLists.size(); j++) { List<FeeDto> reportFeeDtoList = reportFeeDtoLists.get(j); // 先判断列表是否为null,再判断列表是否为空 if (reportFeeDtoList == null || reportFeeDtoList.isEmpty()) { continue; } // if (j > 4 && reportFeeDtoList.size() == 1 && reportFeeDtoLists.get(j - 1).size() == 1){ // ind++; // } FeeDto firstFeeDto = reportFeeDtoList.get(0); // 判断第一个元素和其report属性是否为null if (firstFeeDto == null || firstFeeDto.getReport() == null) { continue; } // 安全访问report数组 double[] reportArray = firstFeeDto.getReport(); for (int i = 0; i < reportArray.length; i++) { // 确保arr的索引有效(避免数组越界) if (j + ind + 2 < arr.length && i + 3 < arr[j + ind + 2].length) { arr[j + ind + 2][i + 3] = reportArray[i]; } } if (reportFeeDtoList.size() > 1) { for (int jj = 1; jj < reportFeeDtoList.size(); jj++) { FeeDto feeDto = reportFeeDtoList.get(jj - 1); if (feeDto == null || feeDto.getReport() == null) { continue; } // 安全访问report数组 reportArray = feeDto.getReport(); for (int i = 0; i < reportArray.length; i++) { // 确保arr的索引有效(避免数组越界) if (j + ind + 2 < arr.length && i + 3 < arr[j + ind + 2].length) { arr[j + ind + 2][i + 3] = reportArray[i]; } } ind ++; } } } return arr; } @@ -579,9 +623,7 @@ dictDto.setTableColumns("fee_type_cd"); List<DictDto> dictDtos = dictV1InnerServiceSMO.queryDicts(dictDto); for (DictDto dictDto1 : dictDtos) {//类型 List<FeeDto> reportFeeDtos = new LinkedList<>();//该类型的数组 FeeDto feeDto = new FeeDto(); LinkedList<FeeDto> feeDtos = new LinkedList<>();//总的 int kg = 0; for (Map map : result){ if(map.get("费用所属年份").equals("类型总计") && map.containsKey("fee_type_cd") && map.get("fee_type_cd").equals(dictDto1.getStatusCd())){ @@ -723,13 +765,13 @@ linkedList.add(feeDto1); reportFeeDtoLists.add(linkedList); } if (ind == 3){ if (ind == 2){ // fee.setCurYear("停车费合计(3+...+7)"); // fee.setReport(colByCar); // carFeeList.add(fee); reportFeeDtoLists.add(carFeeList); } if (ind == 8){ if (ind == 7){ // fee2.setCurYear("其他类合计(8+...+22)"); // fee2.setReport(colByOther); // otherFeeList.add(fee2); service-job/src/main/java/com/java110/job/export/adapt/ReportPropertyFeeAdapt.java
@@ -288,7 +288,7 @@ String[] rowData = new String[arrLength]; // 设置基础信息 rowData[0] = String.valueOf(row * (page - 1) + i + 1); rowData[0] = String.valueOf(i + 1); rowData[1] = String.valueOf(room.getOrDefault("property_type", "")); rowData[2] = String.valueOf(room.getOrDefault("floor_num", "")); rowData[3] = String.valueOf(room.getOrDefault("unit_num", "")); service-job/src/main/java/com/java110/job/importData/adapt/ImportHistoryFeeDetailQueueDataAdapt.java
@@ -145,14 +145,13 @@ List<ImportRoomFee> importRoomFees = new ArrayList<>(); List<ImportRoomFee> importCarFees = new ArrayList<>(); List<ImportRoomFee> importContractFees = new ArrayList<>(); List<CarInoutPo> carInoutPos = new ArrayList<>(); String communityId = assetImportLogDetailDto.getCommunityId(); JSONObject data = JSONObject.parseObject(assetImportLogDetailDto.getContent()); ImportRoomFee importRoomFee = BeanConvertUtil.covertBean(data, ImportRoomFee.class); if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() <= DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime()){ throw new IllegalStateException("该费用为起始时间小于小区接管时间不进行导入"); } // if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() <= DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime()){ // throw new IllegalStateException("该费用为起始时间小于小区接管时间不进行导入"); // } if (importRoomFee.getEndTime() != null){ String[] split = importRoomFee.getEndTime().split(" "); importRoomFee.setEndTime(split[0] + " 23:59:59"); @@ -285,11 +284,66 @@ try{ if(!(ListUtil.isNull(importRoomFees))){ if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() <= DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime()){ ImportRoomFee original = importRoomFees.get(0); ImportRoomFee importRoomFee1 = (ImportRoomFee) original.clone(); // 克隆新对象 ImportRoomFee importRoomFee2 = (ImportRoomFee) original.clone(); // 克隆另一个新对象 double cycle = (DateUtil.dayCompare( DateUtil.getDateFromStringA(importRoomFee1.getStartTime()), DateUtil.getDateFromStringA(importRoomFee1.getEndTime()) )) ; double amount = Double.parseDouble(importRoomFee1.getAmount()); importRoomFees = new ArrayList<>(); importRoomFee1.setEndTime(DateUtil.getAddDayStringB(DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]),-1) + " 23:59:59"); importRoomFee1.setCycle((DateUtil.dayCompare( DateUtil.getDateFromStringA(importRoomFee1.getStartTime()), DateUtil.getDateFromStringA(importRoomFee1.getEndTime()) )) + ""); importRoomFee1.setAmount((amount/cycle) * Double.parseDouble(importRoomFee1.getCycle()) + ""); importRoomFee2.setStartTime(assetImportLogDetailDto.getTakeTime().split(" ")[0] + " 00:00:00"); importRoomFee2.setCycle((DateUtil.dayCompare( DateUtil.getDateFromStringA(importRoomFee2.getStartTime()), DateUtil.getDateFromStringA(importRoomFee2.getEndTime()) )) + ""); importRoomFee2.setAmount(Double.parseDouble(importRoomFee2.getAmount()) - Double.parseDouble(importRoomFee1.getAmount()) + ""); importRoomFee1.setState("1600"); importRoomFee2.setState("1400"); importRoomFees.add(importRoomFee1); importRoomFees.add(importRoomFee2); } importFeeDetails(importRoomFees.get(0).getStoreId(), importRoomFees.get(0).getUserId(), importRoomFees, importRoomFees.get(0).getBatchId()); } if(!(ListUtil.isNull(importCarFees))){ if (DateUtil.getDateFromStringB(data.getString("chargeStart").split(" ")[0]).getTime() <= DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]).getTime()){ importRoomFees = importCarFees; ImportRoomFee importRoomFee1 = importRoomFees.get(0); ImportRoomFee importRoomFee2 = importRoomFees.get(0); importRoomFees = new ArrayList<>(); importRoomFee1.setEndTime(DateUtil.getAddDayStringB(DateUtil.getDateFromStringB(assetImportLogDetailDto.getTakeTime().split(" ")[0]),-1) + " 23:59:59"); double cycle = Double.parseDouble(importRoomFee1.getCycle()); double amount = Double.parseDouble(importRoomFee1.getAmount()); importRoomFee1.setCycle((DateUtil.dayCompare( DateUtil.getDateFromStringA(importRoomFee1.getStartTime()), DateUtil.getDateFromStringA(importRoomFee1.getEndTime()) )) + ""); importRoomFee1.setAmount((amount/cycle) * Double.parseDouble(importRoomFee1.getCycle()) + ""); importRoomFee2.setStartTime(assetImportLogDetailDto.getTakeTime().split(" ")[0] + " 00:00:00"); importRoomFee2.setCycle((DateUtil.dayCompare( DateUtil.getDateFromStringA(importRoomFee2.getStartTime()), DateUtil.getDateFromStringA(importRoomFee2.getEndTime()) )) + ""); importRoomFee2.setAmount(Double.parseDouble(importRoomFee2.getAmount()) - Double.parseDouble(importRoomFee1.getAmount()) + ""); importRoomFee1.setState("1600"); importRoomFee2.setState("1400"); importCarFeeDetails2(importCarFees.get(0).getStoreId(), importCarFees.get(0).getUserId(), importCarFees, importCarFees.get(0).getBatchId()); importRoomFees.add(importRoomFee1); importRoomFees.add(importRoomFee2); importCarFeeDetails2(importCarFees.get(0).getStoreId(), importCarFees.get(0).getUserId(), importRoomFees, importCarFees.get(0).getBatchId()); } else{ importCarFeeDetails2(importCarFees.get(0).getStoreId(), importCarFees.get(0).getUserId(), importCarFees, importCarFees.get(0).getBatchId()); } } }catch (IllegalStateException e){ throw new IllegalArgumentException(e.getMessage()); @@ -459,7 +513,7 @@ } } feeDto2.setCommunityId(importRoomFee.getCommunityId()); if (new BigDecimal(importRoomFee.getAmount()).doubleValue() >= 0){ if (new BigDecimal(importRoomFee.getAmount()).doubleValue() >= 0 && !importRoomFee.getState().equals("1600")){ feeDto2.setStatusCd("0"); feeDto2.setUseStart(DateUtil.getDateFromStringA(importRoomFee.getStartTime())); feeDto2.setUseEnd(DateUtil.getDateFromStringA(importRoomFee.getEndTime())); @@ -468,7 +522,7 @@ if (new BigDecimal(importRoomFee.getAmount()).doubleValue() >= 0) { feeDtos.removeIf(feeDto -> "2009001".equals(feeDto.getState())); } if(feeDtos.size() == 0){ if(feeDtos.size() == 0 && !importRoomFee.getState().equals("1600")){ updateImportLogDetailState(importRoomFee.getDetailId(),new IllegalArgumentException("费用项"+importRoomFee.getFeeName()+"不存在")); throw new IllegalArgumentException("费用记录"+importRoomFee.getFeeName()+"不存在"); @@ -575,6 +629,9 @@ cycle = cycle - cycle - cycle; payFeeDetailPo.setState("1300"); } if (importRoomFee.getState() != null){ payFeeDetailPo.setState(importRoomFee.getState()); } int count = feeDetailInnerServiceSMOImpl.queryFeeDetailsCountByVo(payFeeDetailPo); payFeeDetailPo.setPayableAmount(importRoomFee.getAmount()); @@ -599,6 +656,12 @@ payFeeDetailPo.setState("1300"); int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo); return; } else if (importRoomFee.getState().equals("1600")){ payFeeDetailPo.setDetailId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_detailId)); payFeeDetailPo.setReceivableAmount(computeFeeByCycle(tmpFeeDto,importRoomFee)+""); payFeeDetailPo.setDiscountAmount("0"); int saved = feeDetailInnerServiceSMOImpl.saveFeeDetail(payFeeDetailPo); return; } PayFeeDetailDiscountPo payFeeDetailDiscount = new PayFeeDetailDiscountPo(); springboot/src/main/resources/application-debug.yml
@@ -33,7 +33,6 @@ max-idle: 50 min-idle: 20 timeout: 0 password: redis2020 activiti: database-schema-update: false datasource: springboot/src/main/resources/application.yml
@@ -1,6 +1,6 @@ spring: profiles: active: debug active: devlocal import: line: