⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reportprize.java

📁 一个直销用的管理软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -