/*
|
* Copyright 2017-2020 吴学文 and java110 team.
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
package com.java110.job.adapt.report.asyn.impl;
|
|
import com.java110.core.factory.GenerateCodeFactory;
|
import com.java110.core.smo.IComputeFeeSMO;
|
import com.java110.dto.fee.FeeAttrDto;
|
import com.java110.dto.fee.FeeDto;
|
import com.java110.intf.report.IReportOwnerPayFeeInnerServiceSMO;
|
import com.java110.job.adapt.report.ReportOwnerPayFeeAdapt;
|
import com.java110.job.adapt.report.asyn.ISaveReportOwnerPayFee;
|
import com.java110.po.fee.PayFeeDetailPo;
|
import com.java110.po.reportOwnerPayFee.ReportOwnerPayFeePo;
|
import com.java110.utils.util.DateUtil;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.scheduling.annotation.Async;
|
import org.springframework.stereotype.Service;
|
|
import java.math.BigDecimal;
|
import java.text.ParseException;
|
import java.util.ArrayList;
|
import java.util.Calendar;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @desc add by 吴学文 16:28
|
*/
|
@Service
|
public class SaveReportOwnerPayFeeImpl implements ISaveReportOwnerPayFee {
|
private static Logger logger = LoggerFactory.getLogger(SaveReportOwnerPayFeeImpl.class);
|
|
|
@Autowired
|
private IComputeFeeSMO computeFeeSMOImpl;
|
|
@Autowired
|
private IReportOwnerPayFeeInnerServiceSMO reportOwnerPayFeeInnerServiceSMOImpl;
|
|
@Override
|
@Async
|
public void saveData(PayFeeDetailPo payFeeDetailPo, FeeDto feeDto) {
|
List<String> dateSub = null;
|
try {
|
dateSub = analyseDate(DateUtil.getDateFromString(payFeeDetailPo.getStartTime(), DateUtil.DATE_FORMATE_STRING_A),
|
DateUtil.getDateFromString(payFeeDetailPo.getEndTime(), DateUtil.DATE_FORMATE_STRING_A));
|
} catch (ParseException e) {
|
logger.error("出错了", e);
|
return;
|
}
|
|
if (dateSub.size() < 1) {
|
return;
|
}
|
|
BigDecimal amount = new BigDecimal(payFeeDetailPo.getReceivedAmount());
|
amount = amount.divide(new BigDecimal(dateSub.size()), BigDecimal.ROUND_HALF_UP);
|
|
for (String dateStr : dateSub) {
|
try {
|
dealOwnerPayFee(dateStr, payFeeDetailPo, feeDto, amount.doubleValue());
|
} catch (Exception e) {
|
logger.error("出错了", e);
|
return;
|
}
|
}
|
}
|
|
|
private void dealOwnerPayFee(String dateStr, PayFeeDetailPo payFeeDetailPo, FeeDto feeDto, double amount) throws Exception {
|
ReportOwnerPayFeePo reportOwnerPayFeePo = new ReportOwnerPayFeePo();
|
reportOwnerPayFeePo.setCommunityId(payFeeDetailPo.getCommunityId());
|
reportOwnerPayFeePo.setAmount(amount + "");
|
reportOwnerPayFeePo.setConfigId(feeDto.getConfigId());
|
reportOwnerPayFeePo.setConfigName(feeDto.getFeeName());
|
reportOwnerPayFeePo.setFeeName(feeDto.getFeeName());
|
reportOwnerPayFeePo.setDetailId(payFeeDetailPo.getDetailId());
|
reportOwnerPayFeePo.setFeeId(feeDto.getFeeId());
|
//获取缴费用户楼栋单元房间号
|
String payerObjName = computeFeeSMOImpl.getFeeObjName(feeDto);
|
reportOwnerPayFeePo.setObjId(feeDto.getPayerObjId());
|
reportOwnerPayFeePo.setObjName(payerObjName);
|
reportOwnerPayFeePo.setObjType(feeDto.getPayerObjType());
|
reportOwnerPayFeePo.setOwnerId(FeeAttrDto.getFeeAttrValue(feeDto, FeeAttrDto.SPEC_CD_OWNER_ID));
|
reportOwnerPayFeePo.setOwnerName(FeeAttrDto.getFeeAttrValue(feeDto, FeeAttrDto.SPEC_CD_OWNER_NAME));
|
reportOwnerPayFeePo.setPfDate(dateStr);
|
reportOwnerPayFeePo.setPfMonth(getMonth(dateStr) + "");
|
reportOwnerPayFeePo.setPfId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_pfId));
|
reportOwnerPayFeePo.setPfYear(getYear(dateStr) + "");
|
reportOwnerPayFeeInnerServiceSMOImpl.saveReportOwnerPayFee(reportOwnerPayFeePo);
|
}
|
|
public static int getMonth(String dateStr) throws Exception {
|
Date date = DateUtil.getDateFromString(dateStr, DateUtil.DATE_FORMATE_STRING_B);
|
Calendar c1 = Calendar.getInstance();
|
c1.setTime(date);
|
return c1.get(Calendar.MONTH) + 1;
|
}
|
|
public static int getYear(String dateStr) throws Exception {
|
Date date = DateUtil.getDateFromString(dateStr, DateUtil.DATE_FORMATE_STRING_B);
|
Calendar c1 = Calendar.getInstance();
|
c1.setTime(date);
|
return c1.get(Calendar.YEAR);
|
}
|
|
public static List<String> analyseDate(Date begintime, Date endtime) {
|
List<String> results = new ArrayList<String>();
|
Calendar c1 = Calendar.getInstance();
|
Calendar c2 = Calendar.getInstance();
|
c1.setTime(begintime);//2014-02-24
|
c2.setTime(endtime);//2015-04-30
|
String[] str = null;
|
String sd = "";
|
while (c1.compareTo(c2) < 0) {
|
// System.out.println(c1.getTime());
|
str = new String[2];
|
sd = c1.get(Calendar.YEAR) + "-" + (c1.get(Calendar.MONTH) + 1) + "-01";
|
|
|
if (c1.get(Calendar.MONTH) == 2) {
|
c1.add(Calendar.DAY_OF_YEAR, 1);
|
}
|
c1.add(Calendar.MONTH, 1);
|
// System.out.println("str[1]:"+str[1]);
|
results.add(sd);
|
}
|
return results;
|
}
|
}
|