📄 reportprize.java
字号:
package com.susssoft.richjl.operation;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import org.apache.log4j.Logger;
import com.susssoft.richjl.common.Unit;
import com.susssoft.richjl.dboperation.DBConnectionManager;
import com.susssoft.richjl.persistence.Franchiser;
import com.susssoft.richjl.persistence.Report;
/**
* 处理奖金的报表类,包含周报表和月报表,其中核心问题在于上月奖金的扣款为负数问题上(主要体现为经销商重复消费扣除金额大于经销商当周的总金额)
* @author 付祖远
*/
public class ReportPrize {
//日志文件
private static final Logger log = Logger.getLogger(ReportPrize.class);
//定义存储奖金合计的javabean
public Report reportBean = new Report();
/**
* 得到经销商的周报表(目前所做的是得到经销商的当前周的金额汇总)
* @param dealerID 经销商编号
* @return 返回报表所需信息的集合
*/
public List getDealerReportByWeek(){
//下面定义的数据是用来存储javabean,以便于将来返回集合信息
List list = new ArrayList();
//首先得到经销商的列表(目前是包含所有的经销商)
Dealer dealer = new Dealer();
List dealerList = dealer.getDealerList();
//得到当前日期属于哪一周,哪一年,以此得到本周的奖金和(得到当前周可能要调用dll文件)
Calendar cal = Calendar.getInstance();
int[] temp = Unit.getWeekMonthYearOfYear(Unit.getCurrentTimer());
int year = temp[0];
int month = temp[1];
int week = temp[2];
//int week = 31;
//定义每星期得到的奖金以及总奖金的总和,即应发数的合计部分(默认为0)
int moneyonesum = 0;
int moneytwosum = 0;
int moneyOneOthersum = 0;
int weekTotalMoneysum = 0;
//定义重复消费金额,扣税金额,扣除奖金合计,应该得到奖金的总和
int repeatConsumesum = 0;
int deductFaxsum = 0;
int deductTotalsum = 0;
int gainTotalsum = 0;
int deductPrizesum = 0;
//根据经销商列表来查询每个经销商的周报表信息
DBConnectionManager oper = new DBConnectionManager();
ResultSet rs = null;
for(int i=0;i<dealerList.size();i++){
//得到经销商的金额信息
String sql = "select t_userMoney.isflag,t_userMoney.Userid, t_userMoney.MoneyOne, t_userMoney.MoneyTwo, t_userMoney.MoneyOneOther, t_usersign.name from t_userMoney,t_usersign where t_usersign.Userid = t_userMoney.Userid and years=" + year + " and weeks=" + week + " and t_userMoney.userid='" + dealerList.get(i) + "'";
rs = oper.getRs(sql);
try{
//定义javabean,用来存储所有需要的信息
Franchiser bean = new Franchiser();
//重复消费标志
int isflag = -1;
//定义每星期得到的奖金以及总奖金,即应发数的合计部分(默认为0)
int moneyone = 0;
int moneytwo = 0;
int moneyOneOther = 0;
int weekTotalMoney = 0;
//得到经销商的一些细节信息(调用Dealer类中的getDealerInfo方法)
Dealer dealerOper = new Dealer();
List dealerInfo = dealerOper.getDealerInfo(dealerList.get(i).toString());
bean.setUserid(dealerList.get(i).toString());
bean.setName(dealerInfo.get(0).toString());
bean.setBank(dealerInfo.get(1).toString());
bean.setBankcard(dealerInfo.get(2).toString());
//应得奖金部分
//如果此经销商在查询周有奖金,则用下面的语句对金额重新赋值
if(rs.next()){
moneyone = rs.getInt("moneyone");
moneytwo = rs.getInt("moneytwo");
moneyOneOther = rs.getInt("MoneyOneOther");
weekTotalMoney = moneyone + moneyOneOther + moneytwo;
isflag = rs.getInt("isflag");//重复消费标志
}
rs.close();
//扣除奖金部分,包含重复消费,累积扣除,扣税
//定义重复消费金额,扣税金额,扣除奖金合计,应该得到奖金
int repeatConsume = 0;
int deductFax = 0;
int deductTotal = 0;
int gainTotal = 0;
int deductPrize = 0;
if(isflag==1 && weekTotalMoney<88000){
//此周要重复消费,但不扣税
repeatConsume = 55000; //重复消费
deductFax = 0; //扣税
deductPrize = this.getDeductPrize(year,month,week,dealerList.get(i).toString()); //累积扣除
deductTotal = repeatConsume + deductFax + deductPrize; //扣除总计
gainTotal = weekTotalMoney - deductTotal; //应得奖金
} else if(isflag==1 && weekTotalMoney>=88000){
//有重复消费,也有扣税
repeatConsume = 55000; //重复消费
deductFax = (int)((weekTotalMoney - 55000 - 88000)*0.07f); //扣税
deductPrize = this.getDeductPrize(year,month,week,dealerList.get(i).toString()); //累积扣除
deductTotal = repeatConsume + deductFax + deductPrize; //扣除总计
gainTotal = weekTotalMoney - deductTotal; //应得奖金
} else if(isflag!=1 && weekTotalMoney<88000){
//无重复消费,无扣税
repeatConsume = 0; //重复消费
deductFax = 0; //扣税
deductPrize = this.getDeductPrize(year,month,week,dealerList.get(i).toString()); //累积扣除
deductTotal = repeatConsume + deductFax + deductPrize; //扣除总计
gainTotal = weekTotalMoney - deductTotal; //应得奖金
} else if(isflag!=-1 && weekTotalMoney>=88000){
//无重复消费,有扣税
repeatConsume = 0; //重复消费
deductFax = (int)((weekTotalMoney - 88000)*0.07f); //扣税
deductPrize = this.getDeductPrize(year,month,week,dealerList.get(i).toString()); //累积扣除
deductTotal = repeatConsume + deductFax + deductPrize; //扣除总计
gainTotal = weekTotalMoney - deductTotal; //应得奖金
}
//下面将奖金传到bean中,模轴部分
//应得奖金部分
bean.setMoneyOneY(Unit.getMoneyByY(moneyone));
bean.setMoneyTwoY(Unit.getMoneyByY(moneytwo));
bean.setMoneyOneOtherY(Unit.getMoneyByY(moneyOneOther));
bean.setWeekTotalMoney(Unit.getMoneyByY(weekTotalMoney));
//扣除部分
bean.setConsumeMoneyY(Unit.getMoneyByY(repeatConsume)); //重复消费
bean.setSmallTaxY(Unit.getMoneyByY(deductFax)); //扣税
bean.setDedutePrizeY(Unit.getMoneyByY(deductPrize)); //累积扣除金额
bean.setLastPrizeY(Unit.getMoneyByY(deductTotal)); //扣除总计
bean.setGainedPrizeY(Unit.getMoneyByY(gainTotal)); //应得金额
//下面将奖金总计放到reportBean中,为纵轴部分
moneyonesum = moneyonesum + moneyone;
moneytwosum = moneytwosum + moneytwo;
moneyOneOthersum = moneyOneOthersum + moneyOneOther;
weekTotalMoneysum = weekTotalMoneysum + weekTotalMoney;
repeatConsumesum = repeatConsumesum + repeatConsume;
deductFaxsum = deductFaxsum + deductFax;
deductPrizesum = deductPrizesum + deductPrize;
deductTotalsum = deductTotalsum + deductTotal;
gainTotalsum = gainTotalsum + gainTotal;
list.add(bean);
} catch (SQLException e){
log.error("得到经销商的周报表的数据的时候出错:" + e);
} finally {
oper.closeConn();
}
}
reportBean.setOpenUpPrizeY(Unit.getMoneyByY(moneyonesum));
reportBean.setColonizePrizeY(Unit.getMoneyByY(moneytwosum));
reportBean.setRepeatConsumePrizeY(Unit.getMoneyByY(moneyOneOthersum));
reportBean.setTotalPrizeY(Unit.getMoneyByY(weekTotalMoneysum));
reportBean.setRepeatConsumeY(Unit.getMoneyByY(repeatConsumesum)); //重复消费金额统计
reportBean.setTaxY(Unit.getMoneyByY(deductFaxsum)); //扣税金额统计
reportBean.setTotalDeductPrizeY(Unit.getMoneyByY(deductPrizesum)); //累积扣除总计
reportBean.setTotalTaxY(Unit.getMoneyByY(deductTotalsum)); //扣除金额统计
reportBean.setTotalGainedPrizeY(Unit.getMoneyByY(gainTotalsum)); //应得奖金统计
return list;
}
/**
* 下面方法的作用是求出这一周累积扣除的金额,此金额只能为负数和零
* @param years 查询的年份
* @param months 查询的月份
* @param weeks 查询的星期
* @param dealerID 经销商编号
* @return 返回应该要扣除的金额
*/
public int getDeductPrize(int years,int months,int weeks,String dealerID){
//累积扣除金额
int deductPrize = 0;
//首先判断这一年这一月是否有重复消费(判断isflag是否为1)
DBConnectionManager oper = new DBConnectionManager();
//进行重复消费的周
int deductWeek = 0;
String sql = "SELECT weeks,MoneyOne, MoneyTwo, MoneyOneOther FROM t_userMoney WHERE (years = " + years + ") AND (months = " + months + ") AND (isflag = 1) AND (Userid = '" + dealerID +"')";
ResultSet rs = oper.getRs(sql);
try{
//得到重复消费周
if(rs.next()){
deductWeek = rs.getInt("weeks");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -