Browse Source

财务管理更新

Signed-off-by: you.chen <you.chen@cloudcross.com>
you.chen 9 years ago
parent
commit
53c1ff0fc5

+ 16 - 6
src/main/java/com/cloudcross/ssp/model/mapper/adv-balance.sql.xml

@@ -62,7 +62,7 @@
 			 and consume > 0
 			</if>
 		</where>
-		order by  a.act_time  desc
+		order by  act_time  desc
 		limit #{pager.offset}, #{pager.limit}
 	</select>	
 	
@@ -92,7 +92,7 @@
 			 and consume > 0
 			</if>
 		</where>
-		order by  a.act_time  desc
+		order by  act_time  desc
 	</select>	
 	
 	
@@ -239,9 +239,19 @@
 		delete from t_adv_balance where id = #{id}
 	</delete>
 	
-	<select id="findAgentBalance" parameterType="long" resultType="Double">
-		select balance from t_adv_balance where agent_id = 2 and advertiser_id = 0 
-		order by id desc 
-		limit 1
+	<select id="findBalanceByAdvertiserId" parameterType="long" resultType="double">
+		select balance from t_adv_balance where advertiser_id = #{advertiserId} and status != -1 order by id desc limit 1
 	</select>
+	
+	
+	<insert id="insertAgentAllocation" parameterType="map">
+		insert into t_adv_balance(account_id, agent_id, act_time, num, allocate, balance) 
+		values(#{accountId}, #{agentId}, #{actTime}, #{num}, #{allocate}, #{agentBalance})
+	</insert>
+	
+	<insert id="insertAdvertiserAllocation" parameterType="map">
+		insert into t_adv_balance(account_id, advertiser_id, act_time, num, allocate, balance) 
+		values(#{accountId}, #{advertiserId}, #{actTime}, #{num}, #{allocate}, #{advertiserBalance})
+	</insert>
+	
 </mapper>

+ 5 - 1
src/main/java/com/cloudcross/ssp/model/mapper/advertiser.sql.xml

@@ -299,7 +299,6 @@
 		t_advertiser.name as name,
 		reg_name as regName,
 		homepage as homePage,
-		t_advertiser.operator_id as operatorId, 
 		t_advertiser.contacts,
 		t_advertiser.tel as tel,
 		t_advertiser.email as email,
@@ -525,4 +524,9 @@
 	<select id="selectAdvertiserNameById" parameterType="int" resultType="String">
 		select name from t_advertiser where id = #{id}
 	</select>
+	
+	<update id="updateBalance" parameterType="map">
+		update t_advertiser set balance = #{advertiserBalance}
+		where id = #{advertiserId}
+	</update>
 </mapper>

+ 29 - 30
src/main/java/com/cloudcross/ssp/model/mapper/finance.sql.xml

@@ -17,40 +17,39 @@
 		balance
 	</sql>
 	
-	<!-- 此时加入了帐号管理,只有该帐号下的广告主显示 -->
 	<select id="findByParams"  parameterType="map" resultType="com.cloudcross.ssp.model.Finance">
-	    select a.id,b.name as advertiserName,(sum(a.allocate)-sum(a.consume)) as adBalance,sum(a.allocate) as sumAllocation,max(a.act_time) as upDated from t_adv_balance a,t_advertiser b 
-        where a.advertiser_id=b.id and a.agent_id=b.agent_id
-        and a.agent_id=#{agentId}
-     <!--     and a.account_id=#{accountId} -->
-        <if test="advertiserId !=null ">
-		and a.advertiser_id = #{advertiserId} 
-		</if>		
-		<if test="adverId !=null ">
-		and a.advertiser_id = #{adverId} 
-		</if>	
-     <!--     <if test="advertiserName !=null ">
-		and b.name = #{advertiserName} 
-		</if> 
-     -->
-        group by a.advertiser_id		
-		order by  b.name   desc
-	limit #{pager.offset}, #{pager.limit}
+	    select a.id as id, a.name as advertiserName, (ifnull(sum(b.allocate), 0) - ifnull(sum(b.consume), 0)) as adBalance, ifnull(sum(b.allocate), 0) as sumAllocation, max(b.act_time) as upDated from t_adv_balance b,t_advertiser a 
+      	where a.id = b.advertiser_id 
+      	<if test="agentId != null">
+				and a.agent_id = #{agentId}
+		</if>
+			<if test="advertiserId != null">
+				and a.id = #{advertiserId}
+			</if>
+		limit #{pager.offset}, #{pager.limit}
 	</select>
 	
-	<select id="countByParams" parameterType="map" resultType="int">
-		select count(1)
-		from (( select distinct a.advertiser_id from  t_adv_balance a,t_advertiser b  
-        where a.advertiser_id=b.id and a.agent_id=b.agent_id
-        and a.agent_id=#{agentId}
-     <!--  and a.account_id=#{accountId}  -->
-        <if test="advertiserId !=null ">
-		and a.advertiser_id = #{advertiserId} 
-		</if>	
-		<if test="adverId !=null ">
-		and a.advertiser_id = #{adverId} 
+	<select id="findByParams1" parameterType="map" resultType="com.cloudcross.ssp.model.Finance">
+		 select a.id as id, a.name as advertiserName, (ifnull(sum(b.allocate), 0) - ifnull(sum(b.consume), 0)) as adBalance, ifnull(sum(b.allocate), 0) as sumAllocation, max(b.act_time) as upDated from t_adv_balance b,t_advertiser a 
+      	where a.id = b.advertiser_id 
+      	<if test="agentId != null">
+				and a.agent_id = #{agentId}
 		</if>
-   	 group by a.advertiser_id ) c)
+			<if test="advertiserId != null">
+				and a.id = #{advertiserId}
+			</if>
+	</select>
+	
+	<select id="countByParams" parameterType="map" resultType="int">
+		select count(id) from t_advertiser
+		<where>
+			<if test="agentId != null">
+				agent_id = #{agentId}
+			</if>
+			<if test="advertiserId != null">
+				advertiser_id = #{advertiserId}
+			</if>
+		</where>
 		
 	</select>
 	

+ 9 - 7
src/main/java/com/cloudcross/ssp/service/IAdvBalanceService.java

@@ -20,6 +20,13 @@ public interface IAdvBalanceService extends IGenericService<AdvBalance> {
 	 */
 	Double findBalanceByAgentId(Long agentId);
 	
+	/**
+	 * 根据广告主id得到广告主的余额
+	 * @param advertiserId
+	 * @return
+	 */
+	Double findBalanceByAdvertiserId(Long advertiserId);
+	
 	/**
 	 * 根据代理商id更新它的当前余额
 	 * @param balance
@@ -44,12 +51,7 @@ public interface IAdvBalanceService extends IGenericService<AdvBalance> {
 	 public int countByParamsBack(Map<String, Object> paramMap);
 	 public List<AdvBalance> findByParamsBack(Map<String, Object> paramMap,Pager pager);
 	 
-	 /**
-	  * 查找代理商账号的余额
-	  * @param agentId
-	  * @return
-	  */
-	 Double findAgentBalance(Long agentId);
-	 
 	 List<AdvBalance> findByParamsAdvertiser(Map<String, Object> paramMap);
+	 
+
 }

+ 10 - 0
src/main/java/com/cloudcross/ssp/service/IFinanceService.java

@@ -1,5 +1,6 @@
 package com.cloudcross.ssp.service;
 
+import java.util.List;
 import java.util.Map;
 
 import com.cloudcross.ssp.model.Finance;
@@ -8,4 +9,13 @@ import com.cloudcross.ssp.base.service.IGenericService;
 // 此处的User需要修改为数据库中对应的model
 public interface IFinanceService extends IGenericService<Finance>{
 	public Finance findByBalance(Map<String, Object> paramMap);
+	
+	/**
+	 * 资金分配的保存,插入两条记录,一条是代理商分配的记录,一条是广告主的分配记录
+	 * @param paramMap
+	 * @return
+	 */
+	boolean saveAllocation(Map<String, Object> paramMap);
+	
+	List<Finance> findByParams(Map<String, Object> paramMap);
 }

+ 1 - 1
src/main/java/com/cloudcross/ssp/service/impl/AdReportService.java

@@ -265,7 +265,7 @@ public class AdReportService implements IAdReportService {
 			paramMap.put("agentId", agentId);
 			
 			//得到代理商账号的余额
-			Double balance = advBalanceService.findAgentBalance(agentId);
+			Double balance = advBalanceService.findBalanceByAgentId(agentId);
 			
 			//如果找到的余额为空则余额为0
 			if(null == balance) {

+ 5 - 4
src/main/java/com/cloudcross/ssp/service/impl/AdvBalanceService.java

@@ -117,10 +117,7 @@ public class AdvBalanceService implements IAdvBalanceService{
 		return false;
 	}
 	
-	@Override
-	public Double findAgentBalance(Long agentId) {
-		return myBatisDao.get("advBalanceSqlMapper.findAgentBalance", agentId);
-	}
+	
 	@Override
 	public List<AdvBalance> findByParamsAdvertiser(Map<String, Object> paramMap) {
 		return myBatisDao.getList("advBalanceSqlMapper.selectByParams1", paramMap);
@@ -131,5 +128,9 @@ public class AdvBalanceService implements IAdvBalanceService{
 		paramMap.put("pager", pager);
 		return myBatisDao.getList("advBalanceSqlMapper.selectByParams2", paramMap);
 	}
+	@Override
+	public Double findBalanceByAdvertiserId(Long advertiserId) {
+		return myBatisDao.get("advBalanceSqlMapper.findBalanceByAdvertiserId", advertiserId);
+	}
 
 }

+ 22 - 1
src/main/java/com/cloudcross/ssp/service/impl/FinanceService.java

@@ -6,7 +6,9 @@ import java.util.Map;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import com.cloudcross.ssp.model.Advertiser;
 import com.cloudcross.ssp.model.Finance;
+import com.cloudcross.ssp.service.IAdvertiserService;
 import com.cloudcross.ssp.service.IFinanceService;
 import com.cloudcross.ssp.base.dao.GenericIBatisDao;
 import com.cloudcross.ssp.common.utils.Pager;
@@ -16,7 +18,8 @@ public class FinanceService implements IFinanceService{
 	
 	@Autowired
 	private GenericIBatisDao ibatisDao;
-
+	@Autowired
+	private IAdvertiserService advertiserService;
 	
 	
 	@Override
@@ -65,4 +68,22 @@ public class FinanceService implements IFinanceService{
 		return ibatisDao.get("financeSqlMapper.findByBalance",paramMap);
 	}
 
+	@Override
+	public boolean saveAllocation(Map<String, Object> paramMap) {
+		ibatisDao.save("advBalanceSqlMapper.insertAgentAllocation", paramMap);
+		ibatisDao.save("advBalanceSqlMapper.insertAdvertiserAllocation", paramMap);
+		//同时更新广告主表里的余额
+		Double allocate = Double.parseDouble((String)paramMap.get("allocate"));
+		Advertiser advertiser = advertiserService.findById(Long.parseLong((String)paramMap.get("advertiserId")));
+		Double balance = advertiser.getBalance() + allocate;
+		paramMap.put("advertiserBalance", balance);
+		ibatisDao.save("advertiserSqlMapper.updateBalance", paramMap);
+		return true;
+	}
+
+	@Override
+	public List<Finance> findByParams(Map<String, Object> paramMap) {
+		return ibatisDao.getList("financeSqlMapper.findByParams1", paramMap);
+	}
+
 }

+ 502 - 502
src/main/java/com/cloudcross/ssp/web/advertiser/main/ad/AdvBalanceController.java → src/main/java/com/cloudcross/ssp/web/advertiser/main/finance/AdvBalanceController.java

@@ -1,502 +1,502 @@
-package com.cloudcross.ssp.web.advertiser.main.ad;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.commons.lang.ObjectUtils.Null;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-
-import com.cloudcross.ssp.model.Account;
-import com.cloudcross.ssp.model.AdvBalance;
-import com.cloudcross.ssp.model.Finance;
-import com.cloudcross.ssp.service.IAdvAgentService;
-import com.cloudcross.ssp.service.IAdvBalanceService;
-import com.cloudcross.ssp.base.utils.freemarker.FreemarkerTemplateProcessor;
-import com.cloudcross.ssp.base.web.SimpleController;
-import com.cloudcross.ssp.common.utils.Pager;
-
-@Controller
-@RequestMapping("/advertiser/main/ad/adv-balance")
-public  class AdvBalanceController extends SimpleController {
-	@Autowired
-	protected IAdvBalanceService advBalanceService;
-	@Autowired
-	private FreemarkerTemplateProcessor templateProcessor;
-	@Autowired
-	private IAdvAgentService advAgentService;
-	
-	@RequestMapping
-	public String index(){
-		return redirect(page("list"));
-	}
-	
-	/**
-	 * 财务管理列表页
-	 * 前端需要传递三个参数,一个为广告主id(变量名为selectedAdvertiserId)如果传的是空值或者是-1或者空字符串则为全部
-	 * 一个为类型,变量名为type,最后一个为周期,变量名为dateRangePicker
-	 * 注:当如果是代理商账号登录的时候只能查询到分配记录和充值记录不能查询到消费记录
-	 * 如果是广告主账号登录只能看到分配记录和消费记录没有充值记录
-	 * @param model
-	 * @param paramMap
-	 * @param page
-	 * @return
-	 * @throws ParseException
-	 */
-	@RequestMapping("/list")
-	public String list(Model model,
-			@RequestParam HashMap<String, Object> paramMap,		
-			@RequestParam(defaultValue="1") int page
-			) throws ParseException{
-		Long advertiserId = null;
-		Long agentId = null;
-		String advertiserName = "全部广告主";
-		
-    	//获取当前登录的帐号
-		Account account = getLoginUser();
-		model.addAttribute("loginAccountName", account.getAccountName());
-		
-		/**
-		 * 对登录的账号进行判断,如果代理商id和广告主id都不为0的话表示的是广告主账号
-		 * 如果代理商账号不为0,广告主账号为0的话表示的是代理商账号
-		 */
-		//下面判断是广告主
-        if (0 != account.getAdvertiserId() && 0 != account.getAgentId()) {
-        	paramMap.put("accountId",account.getId());
-        	advertiserId = account.getAdvertiserId();
-		}
-        
-		//下面判断是代理商
-		if(0 != account.getAgentId() && 0 == account.getAdvertiserId()) {
-			paramMap.put("accountId",account.getId());
-			agentId = account.getAgentId();
-		}
-		
-		/**
-		 * 下面对传递进来的参数进行处理
-		 */
-		if (null == paramMap.get("selectedAdvertiserId")
-					|| "".equals(paramMap.get("selectedAdvertiserId"))) {
-				advertiserName = "全部广告主";
-			} else {
-				// 如果要查询的是所有广告主则让广告主id为空
-				if (-1 == Long.parseLong((String) paramMap
-						.get("selectedAdvertiserId"))) {
-					advertiserName = "全部广告主";
-				} else {
-					advertiserId = Long.parseLong((String) paramMap
-							.get("selectedAdvertiserId"));
-					advertiserName = (String) paramMap.get("selectedAdvertiserName");
-				}
-			}
-		
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-		String startDate = null;
-		String endDate = null;
-		//判断日期是否为默认值昨天,日期格式为2015-09-09 to 2015-10-10,用 to 分割
-		if (null == paramMap.get("dateRangePicker")
-				|| "".equals(paramMap.get("dateRangePicker"))) {
-			startDate = endDate = sdf.format(new Date((new Date())
-					.getTime() - 24 * 60 * 60 * 1000));
-		} else {
-			String[] choosedDate = ((String) paramMap
-					.get("dateRangePicker")).split("to");
-			startDate = choosedDate[0].trim();
-			endDate = choosedDate[1].trim();
-		} 
-		
-		
-		/**
-		 * @author Hao
-		 * 选择操作类型,需要从前端传过来一个键值对“type”,默认为null
-		 * 其值与allocate,consume,chage比较确定是选择了哪一类
-		 */
-		String type = null;
-		String typeName = "请选择操作类型";
-		if(null==paramMap.get("type")
-				|| "".equals(paramMap.get("type")) || "0".equals(paramMap.get("type"))){
-			type = "0";
-			typeName = "请选择操作类型";
-		}else if("allocate".equals(paramMap.get("type"))){
-			type = "allocate";
-			typeName = "分配";
-		}else if("consume".equals(paramMap.get("type"))){
-			type = "consume";
-			typeName = "消费";
-		}else{   
-			type = "charge";
-			typeName = "充值";
-		}
-		
-		paramMap.put("startDate", startDate);
-		paramMap.put("endDate",endDate);
-		paramMap.put("agentId", agentId);
-		paramMap.put("advertiserId", advertiserId);
-		paramMap.put("selectedAdvertiserName", advertiserName);
-	    paramMap.put("type", type);
-	    paramMap.put("typeName", typeName);
-		
-		int totalRow = advBalanceService.countByParams(paramMap);
-		Pager pager = new Pager();
-		pager.setPage(page);
-		pager.setTotalRow(totalRow);					
-	    List<AdvBalance> advBalanceList = advBalanceService.findByParams(paramMap, pager);
-	    
-	    if(null != agentId) {
-	    	model.addAttribute("agentName", advAgentService.findById(agentId).getName());
-	    }
-		model.addAllAttributes(paramMap);
-		model.addAttribute("pager", pager);
-		model.addAttribute("advBalanceList", advBalanceList);
-		return page("list");
-	}
-	
-	
-	/**
-	 * 广告主分配记录页面
-	 * 前端需要传递两个参数,一个为广告主id(变量名为selectedAdvertiserId)如果传的是空值或者是-1或者空字符串则为全部
-	 * 另一个为周期,变量名为dateRangePicker
-	 * 注:如果选择的广告主表示全部广告主的话,则显示的是代理商的分配记录,否则是广告主的分配记录
-	 * @param model
-	 * @param paramMap
-	 * @param page
-	 * @return
-	 * @throws ParseException
-	 */
-	@RequestMapping("/distribution")
-	public String distribution(Model model,
-			@RequestParam HashMap<String, Object> paramMap,		
-			@RequestParam(defaultValue="1") int page
-			)throws ParseException{
-		Long agentId = null;
-		Long advertiserId = null;
-    	//获取当前登录的帐号
-		Account account = getLoginUser();
-		model.addAttribute("loginAccountName",account.getAccountName());
-		/**
-		 * 判断登录用户是广告主还是广告主代理商,广告主则advertiserId和agentId都不为0
-		 * 广告主代理商则是agentId不为0,advertiserId等于0
-		 */
-		//下面判断是广告主
-        if (0 != account.getAdvertiserId() && 0 != account.getAgentId()) {
-        	paramMap.put("accountId",account.getId());
-        	advertiserId = account.getAdvertiserId();
-		}
-        
-		//下面判断是代理商
-		if(0 != account.getAgentId() && 0 == account.getAdvertiserId()) {
-			paramMap.put("accountId",account.getId());
-			agentId = account.getAgentId();
-		}
-
-
-		/**
-		 * 下面对传进来的值进行处理
-		 */
-		String advertiserName = "全部广告主";
-		if (null == paramMap.get("selectedAdvertiserId")
-					|| "".equals(paramMap.get("selectedAdvertiserId"))) {
-				advertiserName = "全部广告主";
-			} else {
-				// 如果要查询的是所有广告主则让广告主id为空
-				if (-1 == Long.parseLong((String) paramMap
-						.get("selectedAdvertiserId"))) {
-					advertiserName = "全部广告主";
-				} else {
-					advertiserId = Long.parseLong((String) paramMap
-							.get("selectedAdvertiserId"));
-					advertiserName = (String) paramMap.get("selectedAdvertiserName");
-				}
-			}
-				
-		//日期
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-		String startDate = null;
-		String endDate = null;
-		//判断日期是否为默认值昨天,日期格式为2015-09-09 to 2015-10-10,用 to 分割
-		if (null == paramMap.get("dateRangePicker")
-				|| "".equals(paramMap.get("dateRangePicker"))) {
-			startDate = endDate = sdf.format(new Date((new Date())
-					.getTime() - 24 * 60 * 60 * 1000));
-		} else {
-			String[] choosedDate = ((String) paramMap
-					.get("dateRangePicker")).split("to");
-			startDate = choosedDate[0].trim();
-			endDate = choosedDate[1].trim();
-		} 
-		
-		paramMap.put("agentId", agentId);
-		paramMap.put("advertiserId", advertiserId);
-		paramMap.put("selectedAdvertiserName", advertiserName);
-		paramMap.put("startDate", startDate);
-		paramMap.put("endDate",endDate);
-		
-		int totalRow = advBalanceService.countByParams2(paramMap);
-		Pager pager = new Pager();
-		pager.setPage(page);
-		pager.setTotalRow(totalRow);					
-	    List<AdvBalance> advBalanceList = advBalanceService.findByParams2(paramMap, pager);
-	    
-	    if(null != agentId) {
-	    	model.addAttribute("agentName", advAgentService.findById(agentId).getName());
-	    }
-		model.addAllAttributes(paramMap);
-		model.addAttribute("pager", pager);
-		model.addAttribute("advBalanceList", advBalanceList);
-		return page("distribution");
-        }
-	
-	
-	/**
-	 * 财务管理列表页导出excel
-	 * 前端需要传递三个参数,一个为广告主id(变量名为selectedAdvertiserId)如果传的是空值或者是-1或者空字符串则为全部
-	 * 一个为类型,变量名为type,最后一个为周期,变量名为dateRangePicker
-	 * 注:当如果是代理商账号登录的时候只能查询到分配记录和充值记录不能查询到消费记录
-	 * 如果是广告主账号登录只能看到分配记录和消费记录没有充值记录
-	 * @param model
-	 * @param request
-	 * @param response
-	 * @param paramMap
-	 */
-	@RequestMapping("/exportDataReportExcel")
-	public void exportDataReportExcel(Model model,HttpServletRequest request,
-			HttpServletResponse response,
-			@RequestParam Map<String, Object> paramMap) {
-					
-		Long advertiserId = null;
-		Long agentId = null;
-		String advertiserName = "全部广告主";
-		
-    	//获取当前登录的帐号
-		Account account = getLoginUser();
-		model.addAttribute("loginAccountName", account.getAccountName());
-		
-		/**
-		 * 对登录的账号进行判断,如果代理商id和广告主id都不为0的话表示的是广告主账号
-		 * 如果代理商账号不为0,广告主账号为0的话表示的是代理商账号
-		 */
-		//下面判断是广告主
-        if (0 != account.getAdvertiserId() && 0 != account.getAgentId()) {
-        	paramMap.put("accountId",account.getId());
-        	advertiserId = account.getAdvertiserId();
-		}
-        
-		//下面判断是代理商
-		if(0 != account.getAgentId() && 0 == account.getAdvertiserId()) {
-			paramMap.put("accountId",account.getId());
-			agentId = account.getAgentId();
-		}
-		
-		/**
-		 * 下面对传递进来的参数进行处理
-		 */
-		if (null == paramMap.get("selectedAdvertiserId")
-					|| "".equals(paramMap.get("selectedAdvertiserId"))) {
-				advertiserName = "全部广告主";
-			} else {
-				// 如果要查询的是所有广告主则让广告主id为空
-				if (-1 == Long.parseLong((String) paramMap
-						.get("selectedAdvertiserId"))) {
-					advertiserName = "全部广告主";
-				} else {
-					advertiserId = Long.parseLong((String) paramMap
-							.get("selectedAdvertiserId"));
-					advertiserName = (String) paramMap.get("selectedAdvertiserName");
-				}
-			}
-		
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-		String startDate = null;
-		String endDate = null;
-		//判断日期是否为默认值昨天,日期格式为2015-09-09 to 2015-10-10,用 to 分割
-		if (null == paramMap.get("dateRangePicker")
-				|| "".equals(paramMap.get("dateRangePicker"))) {
-			startDate = endDate = sdf.format(new Date((new Date())
-					.getTime() - 24 * 60 * 60 * 1000));
-		} else {
-			String[] choosedDate = ((String) paramMap
-					.get("dateRangePicker")).split("to");
-			startDate = choosedDate[0].trim();
-			endDate = choosedDate[1].trim();
-		} 
-		
-		
-		/**
-		 * @author Hao
-		 * 选择操作类型,需要从前端传过来一个键值对“type”,默认为null
-		 * 其值与allocate,consume,chage比较确定是选择了哪一类
-		 */
-		String type = null;
-		String typeName = "请选择操作类型";
-		if(null==paramMap.get("type")
-				|| "".equals(paramMap.get("type")) || "0".equals(paramMap.get("type"))){
-			type = "0";
-			typeName = "请选择操作类型";
-		}else if("allocate".equals(paramMap.get("type"))){
-			type = "allocate";
-			typeName = "分配";
-		}else if("consume".equals(paramMap.get("type"))){
-			type = "consume";
-			typeName = "消费";
-		}else{   
-			type = "charge";
-			typeName = "充值";
-		}
-		
-		paramMap.put("startDate", startDate);
-		paramMap.put("endDate",endDate);
-		paramMap.put("agentId", agentId);
-		paramMap.put("advertiserId", advertiserId);
-		paramMap.put("selectedAdvertiserName", advertiserName);
-	    paramMap.put("type", type);
-	    paramMap.put("typeName", typeName);
-	    if(null != agentId) {
-	    	paramMap.put("agentName", advAgentService.findById(agentId).getName());
-	    }	
-	    List<AdvBalance> advBalanceList = advBalanceService.findByParamsAdvertiser(paramMap);
-	    
-		paramMap.put("dataList", advBalanceList);
-		response.reset();
-		// Content-Type:application/vnd.ms-excel;charset=utf8或者text/xml;charset=utf8
-		response.setContentType("application/vnd.ms-excel;charset=utf8");
-		// 设置excel文件名称
-		SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddHHmmss");
-		String fileName = "consumeReport" + df2.format(new Date());
-		response.setHeader("Content-Disposition", "attachment;filename="
-				+ fileName + ".xls");
-		// 需要对excel的列的总数进行指定
-		int column = 6;
-		paramMap.put("dataSize", advBalanceList.size());
-		paramMap.put("column", column);
-		String excelOrder = templateProcessor.processTemplate(
-				"excel/consumeReport.ftl", paramMap);
-		try {
-			PrintWriter out = response.getWriter();
-			out.write(excelOrder);
-			out.flush();
-			out.close();
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}
-		
-	
-	
-	/**
-	 * 广告主分配记录导出excel
-	 * @param model
-	 * @param request
-	 * @param response
-	 * @param paramMap
-	 */
-	@RequestMapping("/exportAllocateReportExcel")
-	public void exportAllocateReportExcel(Model model,HttpServletRequest request,
-			HttpServletResponse response,
-			@RequestParam Map<String, Object> paramMap) {
-		Long agentId = null;
-		Long advertiserId = null;
-    	//获取当前登录的帐号
-		Account account = getLoginUser();
-		model.addAttribute("loginAccountName",account.getAccountName());
-		/**
-		 * 判断登录用户是广告主还是广告主代理商,广告主则advertiserId和agentId都不为0
-		 * 广告主代理商则是agentId不为0,advertiserId等于0
-		 */
-		//下面判断是广告主
-        if (0 != account.getAdvertiserId() && 0 != account.getAgentId()) {
-        	paramMap.put("accountId",account.getId());
-        	advertiserId = account.getAdvertiserId();
-		}
-        
-		//下面判断是代理商
-		if(0 != account.getAgentId() && 0 == account.getAdvertiserId()) {
-			paramMap.put("accountId",account.getId());
-			agentId = account.getAgentId();
-		}
-
-		/**
-		 * 下面对传进来的值进行处理
-		 */
-		String advertiserName = "全部广告主";
-		if (null == paramMap.get("selectedAdvertiserId")
-					|| "".equals(paramMap.get("selectedAdvertiserId"))) {
-				advertiserName = "全部广告主";
-			} else {
-				// 如果要查询的是所有广告主则让广告主id为空
-				if (-1 == Long.parseLong((String) paramMap
-						.get("selectedAdvertiserId"))) {
-					advertiserName = "全部广告主";
-				} else {
-					advertiserId = Long.parseLong((String) paramMap
-							.get("selectedAdvertiserId"));
-					advertiserName = (String) paramMap.get("selectedAdvertiserName");
-				}
-			}
-				
-		//日期
-		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-		String startDate = null;
-		String endDate = null;
-		//判断日期是否为默认值昨天,日期格式为2015-09-09 to 2015-10-10,用 to 分割
-		if (null == paramMap.get("dateRangePicker")
-				|| "".equals(paramMap.get("dateRangePicker"))) {
-			startDate = endDate = sdf.format(new Date((new Date())
-					.getTime() - 24 * 60 * 60 * 1000));
-		} else {
-			String[] choosedDate = ((String) paramMap
-					.get("dateRangePicker")).split("to");
-			startDate = choosedDate[0].trim();
-			endDate = choosedDate[1].trim();
-		} 
-		
-		paramMap.put("agentId", agentId);
-		paramMap.put("advertiserId", advertiserId);
-		paramMap.put("selectedAdvertiserName", advertiserName);
-		paramMap.put("startDate", startDate);
-		paramMap.put("endDate",endDate);
-				
-	    List<AdvBalance> advBalanceList2 = advBalanceService.findByParams2(paramMap);
-		paramMap.put("dataList", advBalanceList2);
-		response.reset();
-		// Content-Type:application/vnd.ms-excel;charset=utf8或者text/xml;charset=utf8
-		response.setContentType("application/vnd.ms-excel;charset=utf8");
-		// 设置excel文件名称
-		SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddHHmmss");
-		String fileName = "allocateReport" + df2.format(new Date());
-		response.setHeader("Content-Disposition", "attachment;filename="
-				+ fileName + ".xls");
-		// 需要对excel的列和行的总数进行指定
-		int column = 5;
-		paramMap.put("dataSize", advBalanceList2.size());
-		paramMap.put("column", column);
-		String excelOrder = templateProcessor.processTemplate(
-				"excel/allocateReport.ftl", paramMap);
-		try {
-			PrintWriter out = response.getWriter();
-			out.write(excelOrder);
-			out.flush();
-			out.close();
-		} catch (IOException e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-	}	
-		
-	
-}
-
-
-
-
+package com.cloudcross.ssp.web.advertiser.main.finance;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang.ObjectUtils.Null;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import com.cloudcross.ssp.model.Account;
+import com.cloudcross.ssp.model.AdvBalance;
+import com.cloudcross.ssp.model.Finance;
+import com.cloudcross.ssp.service.IAdvAgentService;
+import com.cloudcross.ssp.service.IAdvBalanceService;
+import com.cloudcross.ssp.base.utils.freemarker.FreemarkerTemplateProcessor;
+import com.cloudcross.ssp.base.web.SimpleController;
+import com.cloudcross.ssp.common.utils.Pager;
+
+@Controller
+@RequestMapping("/advertiser/main/finance/adv-balance")
+public  class AdvBalanceController extends SimpleController {
+	@Autowired
+	protected IAdvBalanceService advBalanceService;
+	@Autowired
+	private FreemarkerTemplateProcessor templateProcessor;
+	@Autowired
+	private IAdvAgentService advAgentService;
+	
+	@RequestMapping
+	public String index(){
+		return redirect(page("list"));
+	}
+	
+	/**
+	 * 财务管理列表页
+	 * 前端需要传递三个参数,一个为广告主id(变量名为selectedAdvertiserId)如果传的是空值或者是-1或者空字符串则为全部
+	 * 一个为类型,变量名为type,最后一个为周期,变量名为dateRangePicker
+	 * 注:当如果是代理商账号登录的时候只能查询到分配记录和充值记录不能查询到消费记录
+	 * 如果是广告主账号登录只能看到分配记录和消费记录没有充值记录
+	 * @param model
+	 * @param paramMap
+	 * @param page
+	 * @return
+	 * @throws ParseException
+	 */
+	@RequestMapping("/list")
+	public String list(Model model,
+			@RequestParam HashMap<String, Object> paramMap,		
+			@RequestParam(defaultValue="1") int page
+			) throws ParseException{
+		Long advertiserId = null;
+		Long agentId = null;
+		String advertiserName = "全部广告主";
+		
+    	//获取当前登录的帐号
+		Account account = getLoginUser();
+		model.addAttribute("loginAccountName", account.getAccountName());
+		
+		/**
+		 * 对登录的账号进行判断,如果代理商id和广告主id都不为0的话表示的是广告主账号
+		 * 如果代理商账号不为0,广告主账号为0的话表示的是代理商账号
+		 */
+		//下面判断是广告主
+        if (0 != account.getAdvertiserId() && 0 != account.getAgentId()) {
+        	paramMap.put("accountId",account.getId());
+        	advertiserId = account.getAdvertiserId();
+		}
+        
+		//下面判断是代理商
+		if(0 != account.getAgentId() && 0 == account.getAdvertiserId()) {
+			paramMap.put("accountId",account.getId());
+			agentId = account.getAgentId();
+		}
+		
+		/**
+		 * 下面对传递进来的参数进行处理
+		 */
+		if (null == paramMap.get("selectedAdvertiserId")
+					|| "".equals(paramMap.get("selectedAdvertiserId"))) {
+				advertiserName = "全部广告主";
+			} else {
+				// 如果要查询的是所有广告主则让广告主id为空
+				if (-1 == Long.parseLong((String) paramMap
+						.get("selectedAdvertiserId"))) {
+					advertiserName = "全部广告主";
+				} else {
+					advertiserId = Long.parseLong((String) paramMap
+							.get("selectedAdvertiserId"));
+					advertiserName = (String) paramMap.get("selectedAdvertiserName");
+				}
+			}
+		
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		String startDate = null;
+		String endDate = null;
+		//判断日期是否为默认值昨天,日期格式为2015-09-09 to 2015-10-10,用 to 分割
+		if (null == paramMap.get("dateRangePicker")
+				|| "".equals(paramMap.get("dateRangePicker"))) {
+			startDate = endDate = sdf.format(new Date((new Date())
+					.getTime() - 24 * 60 * 60 * 1000));
+		} else {
+			String[] choosedDate = ((String) paramMap
+					.get("dateRangePicker")).split("to");
+			startDate = choosedDate[0].trim();
+			endDate = choosedDate[1].trim();
+		} 
+		
+		
+		/**
+		 * @author Hao
+		 * 选择操作类型,需要从前端传过来一个键值对“type”,默认为null
+		 * 其值与allocate,consume,chage比较确定是选择了哪一类
+		 */
+		String type = null;
+		String typeName = "请选择操作类型";
+		if(null==paramMap.get("type")
+				|| "".equals(paramMap.get("type")) || "0".equals(paramMap.get("type"))){
+			type = "0";
+			typeName = "请选择操作类型";
+		}else if("allocate".equals(paramMap.get("type"))){
+			type = "allocate";
+			typeName = "分配";
+		}else if("consume".equals(paramMap.get("type"))){
+			type = "consume";
+			typeName = "消费";
+		}else{   
+			type = "charge";
+			typeName = "充值";
+		}
+		
+		paramMap.put("startDate", startDate);
+		paramMap.put("endDate",endDate);
+		paramMap.put("agentId", agentId);
+		paramMap.put("advertiserId", advertiserId);
+		paramMap.put("selectedAdvertiserName", advertiserName);
+	    paramMap.put("type", type);
+	    paramMap.put("typeName", typeName);
+		
+		int totalRow = advBalanceService.countByParams(paramMap);
+		Pager pager = new Pager();
+		pager.setPage(page);
+		pager.setTotalRow(totalRow);					
+	    List<AdvBalance> advBalanceList = advBalanceService.findByParams(paramMap, pager);
+	    
+	    if(null != agentId) {
+	    	model.addAttribute("agentName", advAgentService.findById(agentId).getName());
+	    }
+		model.addAllAttributes(paramMap);
+		model.addAttribute("pager", pager);
+		model.addAttribute("advBalanceList", advBalanceList);
+		return page("list");
+	}
+	
+	
+	/**
+	 * 广告主分配记录页面
+	 * 前端需要传递两个参数,一个为广告主id(变量名为selectedAdvertiserId)如果传的是空值或者是-1或者空字符串则为全部
+	 * 另一个为周期,变量名为dateRangePicker
+	 * 注:如果选择的广告主表示全部广告主的话,则显示的是代理商的分配记录,否则是广告主的分配记录
+	 * @param model
+	 * @param paramMap
+	 * @param page
+	 * @return
+	 * @throws ParseException
+	 */
+	@RequestMapping("/distribution")
+	public String distribution(Model model,
+			@RequestParam HashMap<String, Object> paramMap,		
+			@RequestParam(defaultValue="1") int page
+			)throws ParseException{
+		Long agentId = null;
+		Long advertiserId = null;
+    	//获取当前登录的帐号
+		Account account = getLoginUser();
+		model.addAttribute("loginAccountName",account.getAccountName());
+		/**
+		 * 判断登录用户是广告主还是广告主代理商,广告主则advertiserId和agentId都不为0
+		 * 广告主代理商则是agentId不为0,advertiserId等于0
+		 */
+		//下面判断是广告主
+        if (0 != account.getAdvertiserId() && 0 != account.getAgentId()) {
+        	paramMap.put("accountId",account.getId());
+        	advertiserId = account.getAdvertiserId();
+		}
+        
+		//下面判断是代理商
+		if(0 != account.getAgentId() && 0 == account.getAdvertiserId()) {
+			paramMap.put("accountId",account.getId());
+			agentId = account.getAgentId();
+		}
+
+
+		/**
+		 * 下面对传进来的值进行处理
+		 */
+		String advertiserName = "全部广告主";
+		if (null == paramMap.get("selectedAdvertiserId")
+					|| "".equals(paramMap.get("selectedAdvertiserId"))) {
+				advertiserName = "全部广告主";
+			} else {
+				// 如果要查询的是所有广告主则让广告主id为空
+				if (-1 == Long.parseLong((String) paramMap
+						.get("selectedAdvertiserId"))) {
+					advertiserName = "全部广告主";
+				} else {
+					advertiserId = Long.parseLong((String) paramMap
+							.get("selectedAdvertiserId"));
+					advertiserName = (String) paramMap.get("selectedAdvertiserName");
+				}
+			}
+				
+		//日期
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		String startDate = null;
+		String endDate = null;
+		//判断日期是否为默认值昨天,日期格式为2015-09-09 to 2015-10-10,用 to 分割
+		if (null == paramMap.get("dateRangePicker")
+				|| "".equals(paramMap.get("dateRangePicker"))) {
+			startDate = endDate = sdf.format(new Date((new Date())
+					.getTime() - 24 * 60 * 60 * 1000));
+		} else {
+			String[] choosedDate = ((String) paramMap
+					.get("dateRangePicker")).split("to");
+			startDate = choosedDate[0].trim();
+			endDate = choosedDate[1].trim();
+		} 
+		
+		paramMap.put("agentId", agentId);
+		paramMap.put("advertiserId", advertiserId);
+		paramMap.put("selectedAdvertiserName", advertiserName);
+		paramMap.put("startDate", startDate);
+		paramMap.put("endDate",endDate);
+		
+		int totalRow = advBalanceService.countByParams2(paramMap);
+		Pager pager = new Pager();
+		pager.setPage(page);
+		pager.setTotalRow(totalRow);					
+	    List<AdvBalance> advBalanceList = advBalanceService.findByParams2(paramMap, pager);
+	    
+	    if(null != agentId) {
+	    	model.addAttribute("agentName", advAgentService.findById(agentId).getName());
+	    }
+		model.addAllAttributes(paramMap);
+		model.addAttribute("pager", pager);
+		model.addAttribute("advBalanceList", advBalanceList);
+		return page("distribution");
+        }
+	
+	
+	/**
+	 * 财务管理列表页导出excel
+	 * 前端需要传递三个参数,一个为广告主id(变量名为selectedAdvertiserId)如果传的是空值或者是-1或者空字符串则为全部
+	 * 一个为类型,变量名为type,最后一个为周期,变量名为dateRangePicker
+	 * 注:当如果是代理商账号登录的时候只能查询到分配记录和充值记录不能查询到消费记录
+	 * 如果是广告主账号登录只能看到分配记录和消费记录没有充值记录
+	 * @param model
+	 * @param request
+	 * @param response
+	 * @param paramMap
+	 */
+	@RequestMapping("/exportDataReportExcel")
+	public void exportDataReportExcel(Model model,HttpServletRequest request,
+			HttpServletResponse response,
+			@RequestParam Map<String, Object> paramMap) {
+					
+		Long advertiserId = null;
+		Long agentId = null;
+		String advertiserName = "全部广告主";
+		
+    	//获取当前登录的帐号
+		Account account = getLoginUser();
+		model.addAttribute("loginAccountName", account.getAccountName());
+		
+		/**
+		 * 对登录的账号进行判断,如果代理商id和广告主id都不为0的话表示的是广告主账号
+		 * 如果代理商账号不为0,广告主账号为0的话表示的是代理商账号
+		 */
+		//下面判断是广告主
+        if (0 != account.getAdvertiserId() && 0 != account.getAgentId()) {
+        	paramMap.put("accountId",account.getId());
+        	advertiserId = account.getAdvertiserId();
+		}
+        
+		//下面判断是代理商
+		if(0 != account.getAgentId() && 0 == account.getAdvertiserId()) {
+			paramMap.put("accountId",account.getId());
+			agentId = account.getAgentId();
+		}
+		
+		/**
+		 * 下面对传递进来的参数进行处理
+		 */
+		if (null == paramMap.get("selectedAdvertiserId")
+					|| "".equals(paramMap.get("selectedAdvertiserId"))) {
+				advertiserName = "全部广告主";
+			} else {
+				// 如果要查询的是所有广告主则让广告主id为空
+				if (-1 == Long.parseLong((String) paramMap
+						.get("selectedAdvertiserId"))) {
+					advertiserName = "全部广告主";
+				} else {
+					advertiserId = Long.parseLong((String) paramMap
+							.get("selectedAdvertiserId"));
+					advertiserName = (String) paramMap.get("selectedAdvertiserName");
+				}
+			}
+		
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		String startDate = null;
+		String endDate = null;
+		//判断日期是否为默认值昨天,日期格式为2015-09-09 to 2015-10-10,用 to 分割
+		if (null == paramMap.get("dateRangePicker")
+				|| "".equals(paramMap.get("dateRangePicker"))) {
+			startDate = endDate = sdf.format(new Date((new Date())
+					.getTime() - 24 * 60 * 60 * 1000));
+		} else {
+			String[] choosedDate = ((String) paramMap
+					.get("dateRangePicker")).split("to");
+			startDate = choosedDate[0].trim();
+			endDate = choosedDate[1].trim();
+		} 
+		
+		
+		/**
+		 * @author Hao
+		 * 选择操作类型,需要从前端传过来一个键值对“type”,默认为null
+		 * 其值与allocate,consume,chage比较确定是选择了哪一类
+		 */
+		String type = null;
+		String typeName = "请选择操作类型";
+		if(null==paramMap.get("type")
+				|| "".equals(paramMap.get("type")) || "0".equals(paramMap.get("type"))){
+			type = "0";
+			typeName = "请选择操作类型";
+		}else if("allocate".equals(paramMap.get("type"))){
+			type = "allocate";
+			typeName = "分配";
+		}else if("consume".equals(paramMap.get("type"))){
+			type = "consume";
+			typeName = "消费";
+		}else{   
+			type = "charge";
+			typeName = "充值";
+		}
+		
+		paramMap.put("startDate", startDate);
+		paramMap.put("endDate",endDate);
+		paramMap.put("agentId", agentId);
+		paramMap.put("advertiserId", advertiserId);
+		paramMap.put("selectedAdvertiserName", advertiserName);
+	    paramMap.put("type", type);
+	    paramMap.put("typeName", typeName);
+	    if(null != agentId) {
+	    	paramMap.put("agentName", advAgentService.findById(agentId).getName());
+	    }	
+	    List<AdvBalance> advBalanceList = advBalanceService.findByParamsAdvertiser(paramMap);
+	    
+		paramMap.put("dataList", advBalanceList);
+		response.reset();
+		// Content-Type:application/vnd.ms-excel;charset=utf8或者text/xml;charset=utf8
+		response.setContentType("application/vnd.ms-excel;charset=utf8");
+		// 设置excel文件名称
+		SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddHHmmss");
+		String fileName = "consumeReport" + df2.format(new Date());
+		response.setHeader("Content-Disposition", "attachment;filename="
+				+ fileName + ".xls");
+		// 需要对excel的列的总数进行指定
+		int column = 6;
+		paramMap.put("dataSize", advBalanceList.size());
+		paramMap.put("column", column);
+		String excelOrder = templateProcessor.processTemplate(
+				"excel/consumeReport.ftl", paramMap);
+		try {
+			PrintWriter out = response.getWriter();
+			out.write(excelOrder);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}
+		
+	
+	
+	/**
+	 * 广告主分配记录导出excel
+	 * @param model
+	 * @param request
+	 * @param response
+	 * @param paramMap
+	 */
+	@RequestMapping("/exportAllocateReportExcel")
+	public void exportAllocateReportExcel(Model model,HttpServletRequest request,
+			HttpServletResponse response,
+			@RequestParam Map<String, Object> paramMap) {
+		Long agentId = null;
+		Long advertiserId = null;
+    	//获取当前登录的帐号
+		Account account = getLoginUser();
+		model.addAttribute("loginAccountName",account.getAccountName());
+		/**
+		 * 判断登录用户是广告主还是广告主代理商,广告主则advertiserId和agentId都不为0
+		 * 广告主代理商则是agentId不为0,advertiserId等于0
+		 */
+		//下面判断是广告主
+        if (0 != account.getAdvertiserId() && 0 != account.getAgentId()) {
+        	paramMap.put("accountId",account.getId());
+        	advertiserId = account.getAdvertiserId();
+		}
+        
+		//下面判断是代理商
+		if(0 != account.getAgentId() && 0 == account.getAdvertiserId()) {
+			paramMap.put("accountId",account.getId());
+			agentId = account.getAgentId();
+		}
+
+		/**
+		 * 下面对传进来的值进行处理
+		 */
+		String advertiserName = "全部广告主";
+		if (null == paramMap.get("selectedAdvertiserId")
+					|| "".equals(paramMap.get("selectedAdvertiserId"))) {
+				advertiserName = "全部广告主";
+			} else {
+				// 如果要查询的是所有广告主则让广告主id为空
+				if (-1 == Long.parseLong((String) paramMap
+						.get("selectedAdvertiserId"))) {
+					advertiserName = "全部广告主";
+				} else {
+					advertiserId = Long.parseLong((String) paramMap
+							.get("selectedAdvertiserId"));
+					advertiserName = (String) paramMap.get("selectedAdvertiserName");
+				}
+			}
+				
+		//日期
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+		String startDate = null;
+		String endDate = null;
+		//判断日期是否为默认值昨天,日期格式为2015-09-09 to 2015-10-10,用 to 分割
+		if (null == paramMap.get("dateRangePicker")
+				|| "".equals(paramMap.get("dateRangePicker"))) {
+			startDate = endDate = sdf.format(new Date((new Date())
+					.getTime() - 24 * 60 * 60 * 1000));
+		} else {
+			String[] choosedDate = ((String) paramMap
+					.get("dateRangePicker")).split("to");
+			startDate = choosedDate[0].trim();
+			endDate = choosedDate[1].trim();
+		} 
+		
+		paramMap.put("agentId", agentId);
+		paramMap.put("advertiserId", advertiserId);
+		paramMap.put("selectedAdvertiserName", advertiserName);
+		paramMap.put("startDate", startDate);
+		paramMap.put("endDate",endDate);
+				
+	    List<AdvBalance> advBalanceList2 = advBalanceService.findByParams2(paramMap);
+		paramMap.put("dataList", advBalanceList2);
+		response.reset();
+		// Content-Type:application/vnd.ms-excel;charset=utf8或者text/xml;charset=utf8
+		response.setContentType("application/vnd.ms-excel;charset=utf8");
+		// 设置excel文件名称
+		SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddHHmmss");
+		String fileName = "allocateReport" + df2.format(new Date());
+		response.setHeader("Content-Disposition", "attachment;filename="
+				+ fileName + ".xls");
+		// 需要对excel的列和行的总数进行指定
+		int column = 5;
+		paramMap.put("dataSize", advBalanceList2.size());
+		paramMap.put("column", column);
+		String excelOrder = templateProcessor.processTemplate(
+				"excel/allocateReport.ftl", paramMap);
+		try {
+			PrintWriter out = response.getWriter();
+			out.write(excelOrder);
+			out.flush();
+			out.close();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+	}	
+		
+	
+}
+
+
+
+

+ 106 - 127
src/main/java/com/cloudcross/ssp/web/advertiser/main/finance/FinanceDataController.java

@@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 import com.cloudcross.ssp.model.Account;
 import com.cloudcross.ssp.model.Finance;
+import com.cloudcross.ssp.service.IAdvBalanceService;
 import com.cloudcross.ssp.service.IFinanceService;
 import com.cloudcross.ssp.base.utils.freemarker.FreemarkerTemplateProcessor;
 import com.cloudcross.ssp.base.web.SimpleController;
@@ -31,12 +32,12 @@ import com.cloudcross.ssp.common.utils.Pager;
 @RequestMapping("/advertiser/main/finance/finance-data")
 public class FinanceDataController extends SimpleController {
 	
-//	private static final Logger LOG = Logger
-//			.getLogger(FinanceDataController.class);
-	
     @Autowired
     protected IFinanceService financeService;
     
+    @Autowired
+    private IAdvBalanceService advBalanceService;
+    
 	@Autowired
 	private FreemarkerTemplateProcessor templateProcessor;
     
@@ -46,45 +47,53 @@ public class FinanceDataController extends SimpleController {
     	return redirect(page("list"));
     }
     
+    /**
+     * 资金管理列表页控制
+     * 前端要传递一个广告主id变量名为selectedAdvertiserId,如果是空值或者是空字符串或者是-1表示的是全部广告主,没传默认也表示全部的广告主
+     * @param model
+     * @param paramMap
+     * @param page
+     * @return
+     */
     @RequestMapping("/list")
 	public String list(Model model,@RequestParam HashMap<String, Object> paramMap,@RequestParam(defaultValue="1") int page) {
     	//获取当前登录的帐号
 		Account account = getLoginUser();
 		model.addAttribute("loginAccountName",account.getAccountName());
+		
+		Long agentId = null;
+		Long advertiserId = null;
+		
 		/**
 		 * 判断登录用户是广告主还是广告主代理商,广告主则advertiserId和agentId都不为0
 		 * 广告主代理商则是agentId不为0,advertiserId等于0
 		 */
 		//下面判断是广告主
         if (0 != account.getAdvertiserId() && 0 != account.getAgentId()) {
-        	paramMap.put("accountId",account.getId());
-        	paramMap.put("agentId", account.getAgentId());
-        	//adverId 是为了与advertiserId区分开来,此时为登录的广告主Id,与搜索下拉框不同
-			paramMap.put("adverId", account.getAdvertiserId());
-			
-			model.addAttribute("accountId",account.getId());
-			model.addAttribute("adverId", account.getAdvertiserId());
-			model.addAttribute("agentId", account.getAgentId());
+        	advertiserId = account.getAdvertiserId();
 		}
+        
 		//下面判断是代理商,一般都是代理商登录的
 		if(0 != account.getAgentId() && 0 == account.getAdvertiserId()) {
-			paramMap.put("accountId",account.getId());
-			paramMap.put("agentId", account.getAgentId());
+			agentId = account.getAgentId();
 			
-			model.addAttribute("accountId",account.getId());
-			model.addAttribute("agentId", account.getAgentId());
-		//下拉框搜索用到的是selectedAdvertiserId,这是代理商登录查询的
-		Long advertiserId = null;
+			//如果是代理商账号的话,也要传递一个代理商账号的余额
+			Double agentBalance = advBalanceService.findBalanceByAgentId(agentId);
+			
+			//如果找到的余额为空则设为0
+			if(null == agentBalance) {
+				agentBalance = new Double(0);
+			}
+			model.addAttribute("agentBalance", agentBalance);
+		}
+		
 		String advertiserName = "全部广告主";
 		if (null == paramMap.get("selectedAdvertiserId")
 					|| "".equals(paramMap.get("selectedAdvertiserId"))) {
-				advertiserId = null;
 				advertiserName = "全部广告主";
 			} else {
-				// 如果要查询的是所有广告主则让广告主id为空
 				if (-1 == Long.parseLong((String) paramMap
 						.get("selectedAdvertiserId"))) {
-					advertiserId = null;
 					advertiserName = "全部广告主";
 				} else {
 					advertiserId = Long.parseLong((String) paramMap
@@ -93,19 +102,10 @@ public class FinanceDataController extends SimpleController {
 				}
 			}
 		
+		paramMap.put("agentId", agentId);
 		paramMap.put("advertiserId", advertiserId);
 		paramMap.put("selectedAdvertiserName", advertiserName);
 			
-		}
-		
-	
-		
-//		//广告主名称,搜索.用不到
-//		paramMap.put("advertiserName",advertiserName);
-//		model.addAttribute("advertiserName",advertiserName);
-//		System.out.println("advertiserName" + advertiserName + "111111111111112222222222");
-		
-		
 		int totalRow = financeService.countByParams(paramMap);
 		Pager pager = new Pager();
 		pager.setPage(page);
@@ -113,27 +113,9 @@ public class FinanceDataController extends SimpleController {
 		
 	    List<Finance> financeList = financeService.findByParams(paramMap, pager);
 		
-		
-		// 前端写好后传值为agentBalance,此为广告主代理商的账户余额,
-		//此时测试暂统计agent_id = 1的值,后面的sql语句待修改 (已修改,2015/09/16)
-		//判断是否为代理商,是执行查找,否的话余额为0
-		if(0 == account.getAdvertiserId())
-		{
-			//查找到的是一组数据,其实只需要其中的agentBalance的值
-			Finance agentBa= financeService.findByBalance(paramMap);
-			if(agentBa != null){
-				paramMap.put("agentBalance",agentBa.getAgentBalance());
-			}else{
-				paramMap.put("agentBalance",0);
-			}
-		}
-		else{
-			paramMap.put("agentBalance",0);
-		 }
-		
 		model.addAllAttributes(paramMap);
-		model.addAttribute("pager",pager);
-		model.addAttribute("financeList",financeList);
+		model.addAttribute("pager", pager);
+		model.addAttribute("financeList", financeList);
 		return page("financelist");
 	}	
     
@@ -141,101 +123,114 @@ public class FinanceDataController extends SimpleController {
      * 资金分配跳转
      */
     @RequestMapping("/allocation")
-    public String edit(Model model, @RequestParam Long id,@RequestParam Double agentBalance){//从前端页面传过来的账户余额的值
-    	Finance finance = financeService.findById(id);
+    public String edit(Model model, @RequestParam Long advertiserId){
+    	//得到当前登录用户
+    	Account account = getLoginUser();
+    	//得到该代理商的账户余额
+    	Double agentBalance = advBalanceService.findBalanceByAgentId(account.getAgentId());
+    	//如果找到的余额为空则设为0
+		if(null == agentBalance) {
+			agentBalance = new Double(0);
+		}
     	model.addAttribute("agentBalance",agentBalance);
-    	model.addAttribute("finance",finance);
+    	model.addAttribute("advertiserId", advertiserId);
     	return page("allocation");
     }
     
+    /**
+     * 资金分配保存
+     * 保存时存两条记录,一条是代理商的分配记录,一条是广告主分配的记录(就是广告主被分配到多少钱)
+     * 要接收三个参数值,分别是要分配给那个广告主的id(变量名为advertiserId),分配金额(变量名为allocate),备注(变量名为memo)
+     * @param model
+     * @return
+     */
     @RequestMapping("/save")
-    public String save(Model model, @ModelAttribute("form") Finance finance){
-    //  Finance formerFinance = financeService.findById(t.getId());
-
-    	Finance f= financeService.findById(finance.getId());
-    	f.setAllocate(finance.getAllocate());
-    	f.setMemo(finance.getMemo());
-    	financeService.edit(f);
-    	// 代理商分配后,自身账户余额减少,增加分配后代理商余额记录
-    	f.setAgentBalance(finance.getAgentBalance());
+    public String save(Model model, @RequestParam HashMap<String, Object> paramMap){
+    	
+    	//得到登录账号
     	Account account = getLoginUser();
-    	f.setAccountId((long) account.getId());
-    	financeService.add(f);
+    	paramMap.put("agentId", account.getAgentId());
+    	paramMap.put("accountId", account.getId());
+    	
+    	//将代理商的余额减掉分配的钱,以得到代理商的余额
+    	Double agentBalance = advBalanceService.findBalanceByAgentId(account.getAgentId());
+    	//如果找到的余额为空则设为0
+		if(null == agentBalance) {
+			agentBalance = new Double(0);
+		}
+    	paramMap.put("agentBalance", (agentBalance - Double.parseDouble((String)paramMap.get("allocate"))));
+    	
+    	//将广告主的余额加上所分配到的钱,得到广告主的余额
+    	Double advertiserBalance = advBalanceService.findBalanceByAdvertiserId(Long.parseLong(String.valueOf(paramMap.get("advertiserId"))));
+    	//如果找到的余额为空则设为0
+		if(null == advertiserBalance) {
+			advertiserBalance = new Double(0);
+		}
+    	paramMap.put("advertiserBalance", (advertiserBalance + Double.parseDouble((String)paramMap.get("allocate"))));
+    	
+    	SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+    	SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    	paramMap.put("num", sdf.format(new Date()));
+    	paramMap.put("actTime", sdf1.format(new Date()));
+    	
+    	//保存分配
+    	financeService.saveAllocation(paramMap);
+   
     	return redirect(page("list"));
     }
     
 
-	//导出资金管理页面Excel用
-	
+	/**
+	 * 资金管理导出excel
+	 * 前端要传递一个广告主id变量名为selectedAdvertiserId,如果是空值或者是空字符串或者是-1表示的是全部广告主,没传默认也表示全部的广告主
+	 * @param model
+	 * @param request
+	 * @param response
+	 * @param paramMap
+	 */
 	@RequestMapping("/exportDataReportExcel")
 	public void exportDataReportExcel(Model model,HttpServletRequest request,
 			HttpServletResponse response,
-			@RequestParam(defaultValue="1") int page,
 			@RequestParam Map<String, Object> paramMap) {
-			
-		/**
-		 * 参数和list里要一样
-		 */
-		System.out.println("yuyuyu");
-		
-    	//获取当前登录的帐号
+		Long agentId = null;
+		Long advertiserId = null;
+		//得到当前登录用户
 		Account account = getLoginUser();
-		System.out.println("account" + account + "haoshuai01010101010101");
-		model.addAttribute("loginAccountName",account.getAccountName());
+		
 		/**
 		 * 判断登录用户是广告主还是广告主代理商,广告主则advertiserId和agentId都不为0
 		 * 广告主代理商则是agentId不为0,advertiserId等于0
 		 */
 		//下面判断是广告主
         if (0 != account.getAdvertiserId() && 0 != account.getAgentId()) {
-        	paramMap.put("accountId",account.getId());
-        	paramMap.put("agentId", account.getAgentId());		
-			paramMap.put("advertiserId", account.getAdvertiserId());
-			
-			model.addAttribute("accountId",account.getId());
-			model.addAttribute("advertiserId", account.getAdvertiserId());
-			model.addAttribute("agentId", account.getAgentId());
+        	advertiserId = account.getAdvertiserId();
 		}
+        
 		//下面判断是代理商,一般都是代理商登录的
 		if(0 != account.getAgentId() && 0 == account.getAdvertiserId()) {
-			paramMap.put("accountId",account.getId());
-			paramMap.put("agentId", account.getAgentId());
-			
-			model.addAttribute("accountId",account.getId());
-			model.addAttribute("agentId", account.getAgentId());
-
-		//下拉框搜索用到的是selectedAdvertiserId,这是代理商登录查询的
-		System.out.println("jinjin" + paramMap);
-		System.out.println("shuai" + paramMap.get("selectedAdvertiserId"));
-		Long advertiserId = null;
+			agentId = account.getAgentId();
+		}
+		
+		String advertiserName = "全部广告主";
 		if (null == paramMap.get("selectedAdvertiserId")
 					|| "".equals(paramMap.get("selectedAdvertiserId"))) {
-				advertiserId = null;
+				advertiserName = "全部广告主";
 			} else {
-				// 如果要查询的是所有广告主则让广告主id为空
 				if (-1 == Long.parseLong((String) paramMap
 						.get("selectedAdvertiserId"))) {
-					advertiserId = null;
+					advertiserName = "全部广告主";
 				} else {
 					advertiserId = Long.parseLong((String) paramMap
 							.get("selectedAdvertiserId"));
-					System.out.println("haoshuaieeeeeeeee" + advertiserId);
+					advertiserName = advBalanceService.findById(advertiserId).getAdvertiserName();
 				}
 			}
+		
+		paramMap.put("agentId", agentId);
 		paramMap.put("advertiserId", advertiserId);
-		model.addAttribute("advertiserId", advertiserId);
-			
-		}
+		paramMap.put("selectedAdvertiserName", advertiserName);
 						
-		int totalRow = financeService.countByParams(paramMap);
-	    System.out.println("totalRow" + totalRow + "baobiao");
-   
-		Pager pager = new Pager();
-		pager.setPage(page);
-		pager.setTotalRow(totalRow);
-		
-	    List<Finance> financeList = financeService.findByParams(paramMap, pager);
-	    System.out.println("shuju" + financeList);
+	    List<Finance> financeList = financeService.findByParams(paramMap);
 		paramMap.put("dataList", financeList);
 		response.reset();
 		// Content-Type:application/vnd.ms-excel;charset=utf8或者text/xml;charset=utf8
@@ -245,13 +240,10 @@ public class FinanceDataController extends SimpleController {
 		String fileName = "balanceReport" + df2.format(new Date());
 		response.setHeader("Content-Disposition", "attachment;filename="
 				+ fileName + ".xls");
-		// 需要对excel的列和行的总数进行指定
-		int column = 9;
+		// 需要对excel的列的总数进行指定
+		int column = 4;
 		paramMap.put("dataSize", financeList.size());
 		paramMap.put("column", column);
-		paramMap.put("advertiserName", "资金管理表");
-		paramMap.put("startDate", "2015-04-01");
-		paramMap.put("endDate", "2015-06-01");
 		String excelOrder = templateProcessor.processTemplate(
 				"excel/balanceReport.ftl", paramMap);
 		try {
@@ -264,17 +256,4 @@ public class FinanceDataController extends SimpleController {
 			e.printStackTrace();
 		}
 	}
-	
-	
-	
-	
-			
-	
-//	// 获取当前登录用户的角色,涉及到权限 及用户角色的区别
-//	private Map<String, Object> findLoginUserRole() {
-//		User loginUser = getLoginUser();
-//		Map<String, Object> map = userService.findLoginUserRole(loginUser
-//				.getId());
-//		return map;
-//	}
 }