浏览代码

新增支出相关功能
1.支出模板新增
2.支出项目新增
3.生成支出项目填报支出内容
4.支出项目汇总表

yanliming 3 月之前
父节点
当前提交
7113156624
共有 20 个文件被更改,包括 2565 次插入122 次删除
  1. 23 0
      common/src/main/java/com/jpsoft/employment/modules/base/dao/ExpensesModifyRecordDAO.java
  2. 30 0
      common/src/main/java/com/jpsoft/employment/modules/base/dao/FundExpensesInfoDAO.java
  3. 61 0
      common/src/main/java/com/jpsoft/employment/modules/base/entity/ExpensesModifyRecord.java
  4. 125 0
      common/src/main/java/com/jpsoft/employment/modules/base/entity/FundExpensesInfo.java
  5. 20 0
      common/src/main/java/com/jpsoft/employment/modules/base/service/ExpensesModifyRecordService.java
  6. 22 0
      common/src/main/java/com/jpsoft/employment/modules/base/service/FundExpensesInfoService.java
  7. 34 13
      common/src/main/java/com/jpsoft/employment/modules/base/service/impl/BudgetModifyRecordServiceImpl.java
  8. 103 0
      common/src/main/java/com/jpsoft/employment/modules/base/service/impl/ExpensesModifyRecordServiceImpl.java
  9. 120 0
      common/src/main/java/com/jpsoft/employment/modules/base/service/impl/FundExpensesInfoServiceImpl.java
  10. 235 103
      common/src/main/java/com/jpsoft/employment/modules/base/service/impl/FundIncomeInfoServiceImpl.java
  11. 111 0
      common/src/main/resources/mapper/base/ExpensesModifyRecord.xml
  12. 287 0
      common/src/main/resources/mapper/base/FundExpensesInfo.xml
  13. 0 1
      common/src/main/resources/mapper/base/FundIncomeInfo.xml
  14. 3 0
      common/src/main/resources/mapper/base/TemplateInfo.xml
  15. 9 0
      web/src/main/java/com/jpsoft/employment/modules/base/controller/BudgetModifyRecordController.java
  16. 251 0
      web/src/main/java/com/jpsoft/employment/modules/base/controller/ExpensesModifyRecordController.java
  17. 1120 0
      web/src/main/java/com/jpsoft/employment/modules/base/controller/FundExpensesInfoController.java
  18. 2 0
      web/src/main/java/com/jpsoft/employment/modules/base/controller/FundIncomeInfoController.java
  19. 7 3
      web/src/main/java/com/jpsoft/employment/modules/base/controller/TemplateInfoController.java
  20. 2 2
      web/src/main/resources/application.yml

+ 23 - 0
common/src/main/java/com/jpsoft/employment/modules/base/dao/ExpensesModifyRecordDAO.java

@@ -0,0 +1,23 @@
+package com.jpsoft.employment.modules.base.dao;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+import com.jpsoft.employment.modules.base.entity.ExpensesModifyRecord;
+import java.util.Map;
+import com.jpsoft.employment.modules.common.dto.Sort;
+
+@Repository
+public interface ExpensesModifyRecordDAO {
+	int insert(ExpensesModifyRecord entity);
+	int update(ExpensesModifyRecord entity);
+	int exist(String id);
+	ExpensesModifyRecord get(String id);
+	int delete(String id);
+	List<ExpensesModifyRecord> list();
+	BigDecimal sumByExpensesId(String expensesId);
+	BigDecimal findCurLastAmount(@Param(value = "createTime") String createTime, @Param("expensesId")String expensesId);
+	List<ExpensesModifyRecord> search(Map<String, Object> searchParams, List<Sort> sortList);
+}

+ 30 - 0
common/src/main/java/com/jpsoft/employment/modules/base/dao/FundExpensesInfoDAO.java

@@ -0,0 +1,30 @@
+package com.jpsoft.employment.modules.base.dao;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+import com.jpsoft.employment.modules.base.entity.FundExpensesInfo;
+import java.util.Map;
+import com.jpsoft.employment.modules.common.dto.Sort;
+
+@Repository
+public interface FundExpensesInfoDAO {
+	int insert(FundExpensesInfo entity);
+	int update(FundExpensesInfo entity);
+	int exist(String id);
+	FundExpensesInfo get(String id);
+	int delete(String id);
+	List<FundExpensesInfo> list();
+	List<FundExpensesInfo> findByTemplateOptionId(String templateOptionId);
+	List<FundExpensesInfo> search(Map<String, Object> searchParams, List<Sort> sortList);
+	List<FundExpensesInfo> findByYear(@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("templateId") String templateId);
+
+	Map<String, BigDecimal> sumBudgetRevenue(@Param("serialNumber") String serialNumber, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("templateId") String templateId);
+	BigDecimal sumBySerialNumber(@Param("serialNumber") String serialNumber, @Param("curMonth") String curMonth, @Param("templateId") String templateId);
+
+	BigDecimal sumByTemplateOptionId(@Param("templateOptionId") String templateOptionId, @Param("startDate") String startDate, @Param("endDate") String endDate);
+
+	FundExpensesInfo findOneByTemplateOptionId(@Param("templateOptionId") String templateOptionId, @Param("startDate") String startDate, @Param("endDate") String endDate);
+}

+ 61 - 0
common/src/main/java/com/jpsoft/employment/modules/base/entity/ExpensesModifyRecord.java

@@ -0,0 +1,61 @@
+package com.jpsoft.employment.modules.base.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.math.BigDecimal;
+
+import org.springframework.data.annotation.Transient;
+import org.springframework.format.annotation.DateTimeFormat;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+  描述:base_expenses_modify_record的实体类
+ */
+@Data
+@ApiModel(value = "base_expenses_modify_record的实体类")
+public class ExpensesModifyRecord {
+		@ApiModelProperty(value = "ID")
+	private String id;
+	
+				@ApiModelProperty(value = "收入项目ID")
+	private String expensesId;
+	
+				@ApiModelProperty(value = "原金额")
+	private BigDecimal originalAmount;
+	
+				@ApiModelProperty(value = "修改后当前金额")
+	private BigDecimal currentAmount;
+	
+					@ApiModelProperty(value = "创建时间")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
+	private Date createTime;
+	
+				@ApiModelProperty(value = "更新时间")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
+	private Date updateTime;
+	
+			@ApiModelProperty(value = "创建人")
+	private String createBy;
+	
+				@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	
+				@ApiModelProperty(value = "删除标示")
+	private Boolean delFlag;
+
+
+	@Transient
+	@ApiModelProperty(value = "创建人")
+	private String createName;
+
+	@Transient
+	@ApiModelProperty(value = "当月累计到账金额")
+	private BigDecimal curAccumulate;
+	
+		}

+ 125 - 0
common/src/main/java/com/jpsoft/employment/modules/base/entity/FundExpensesInfo.java

@@ -0,0 +1,125 @@
+package com.jpsoft.employment.modules.base.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.math.BigDecimal;
+
+import org.springframework.data.annotation.Transient;
+import org.springframework.format.annotation.DateTimeFormat;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+  描述:base_fund_expenses_info的实体类
+ */
+@Data
+@ApiModel(value = "base_fund_expenses_info的实体类")
+public class FundExpensesInfo {
+		@ApiModelProperty(value = "ID")
+	private String id;
+	
+				@ApiModelProperty(value = "序号")
+	private String serialNumber;
+	
+				@ApiModelProperty(value = "项目名称")
+	private String name;
+	
+				@ApiModelProperty(value = "原预算支出")
+	private BigDecimal budgetExpenses;
+	
+				@ApiModelProperty(value = "账户名称")
+	private String accountName;
+	
+				@ApiModelProperty(value = "本月到账资金")
+	private BigDecimal curMonthReceived;
+	
+				@ApiModelProperty(value = "实际总收入")
+	private BigDecimal actualTotalRevenue;
+	
+				@ApiModelProperty(value = "累计欠费")
+	private BigDecimal accumulatedArrears;
+	
+				@ApiModelProperty(value = "支出时间区间")
+	private String expensesTimeRange;
+	
+				@ApiModelProperty(value = "支出类型(按月/按年/按季/按学期)")
+	private String expensesType;
+	
+					@ApiModelProperty(value = "终止日")
+	@DateTimeFormat(pattern="yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd",timezone ="GMT+8")
+	private Date endDate;
+	
+			@ApiModelProperty(value = "支出实现部门")
+	private String expensesDepartment;
+	
+				@ApiModelProperty(value = "附件")
+	private String attachment;
+	
+				@ApiModelProperty(value = "会计主体名称")
+	private String accountingName;
+	
+				@ApiModelProperty(value = "备注")
+	private String bak;
+	
+					@ApiModelProperty(value = "创建时间")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
+	private Date createTime;
+	
+				@ApiModelProperty(value = "更新时间")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
+	private Date updateTime;
+	
+			@ApiModelProperty(value = "创建人")
+	private String createBy;
+	
+				@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	
+				@ApiModelProperty(value = "删除标示")
+	private Boolean delFlag;
+	
+					@ApiModelProperty(value = "所属年月")
+	@DateTimeFormat(pattern="yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd",timezone ="GMT+8")
+	private Date year;
+	
+			@ApiModelProperty(value = "排序号")
+	private Integer index;
+	
+				@ApiModelProperty(value = "生成模板ID")
+	private String templateId;
+	
+				@ApiModelProperty(value = "是否合计")
+	private Boolean isSum;
+	
+				@ApiModelProperty(value = "责任人")
+	private String chargePerson;
+	
+				@ApiModelProperty(value = "当前预算支出")
+	private BigDecimal curBudgetExpenses;
+	
+				@ApiModelProperty(value = "模板项目对应ID")
+	private String templateOptionId;
+	
+				@ApiModelProperty(value = "")
+	private Boolean isCountSummary;
+
+	@Transient
+	@ApiModelProperty(value = "终止日页面显示字符串日期")
+	private String endDateStr;
+
+	@Transient
+	@ApiModelProperty(value = "收入类型字符串")
+	private String expensesTypeN;
+
+	@Transient
+	@ApiModelProperty(value = "年月字符串用于显示")
+	private String yearMonthStr;
+	
+		}

+ 20 - 0
common/src/main/java/com/jpsoft/employment/modules/base/service/ExpensesModifyRecordService.java

@@ -0,0 +1,20 @@
+package com.jpsoft.employment.modules.base.service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import com.jpsoft.employment.modules.base.entity.ExpensesModifyRecord;
+import com.github.pagehelper.Page;
+import com.jpsoft.employment.modules.common.dto.Sort;
+
+public interface ExpensesModifyRecordService {
+	ExpensesModifyRecord get(String id);
+	boolean exist(String id);
+	int insert(ExpensesModifyRecord model);
+	int update(ExpensesModifyRecord model);
+	int updateAndExpensesAmount(ExpensesModifyRecord model);
+	int delete(String id);
+	List<ExpensesModifyRecord> list();
+	BigDecimal findCurLastAmount(String createTime, String expensesId);
+	Page<ExpensesModifyRecord> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);
+}

+ 22 - 0
common/src/main/java/com/jpsoft/employment/modules/base/service/FundExpensesInfoService.java

@@ -0,0 +1,22 @@
+package com.jpsoft.employment.modules.base.service;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import com.jpsoft.employment.modules.base.entity.FundExpensesInfo;
+import com.github.pagehelper.Page;
+import com.jpsoft.employment.modules.common.dto.Sort;
+
+public interface FundExpensesInfoService {
+	FundExpensesInfo get(String id);
+	boolean exist(String id);
+	int insert(FundExpensesInfo model);
+	int update(FundExpensesInfo model);
+	int delete(String id);
+	List<FundExpensesInfo> list();
+	Page<FundExpensesInfo> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);
+	Map<String,BigDecimal> sumBudgetRevenue(String serialNumber, String startDate, String endDate, String templateId);
+	BigDecimal sumBySerialNumber(String serialNumber,String curMonth,String templateId);
+	BigDecimal sumByTemplateOptionId(String templateOptionId,String startDate,String endDate);
+	FundExpensesInfo findOneByTemplateOptionId(String templateOptionId,String startDate,String endDate);
+}

+ 34 - 13
common/src/main/java/com/jpsoft/employment/modules/base/service/impl/BudgetModifyRecordServiceImpl.java

@@ -7,14 +7,10 @@ import java.util.Map;
 import java.util.UUID;
 import javax.annotation.Resource;
 
-import com.jpsoft.employment.modules.base.dao.FundIncomeInfoDAO;
-import com.jpsoft.employment.modules.base.dao.TemplateOptionDAO;
-import com.jpsoft.employment.modules.base.entity.FundIncomeInfo;
-import com.jpsoft.employment.modules.base.entity.TemplateOption;
+import com.jpsoft.employment.modules.base.dao.*;
+import com.jpsoft.employment.modules.base.entity.*;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
-import com.jpsoft.employment.modules.base.dao.BudgetModifyRecordDAO;
-import com.jpsoft.employment.modules.base.entity.BudgetModifyRecord;
 import com.jpsoft.employment.modules.base.service.BudgetModifyRecordService;
 import com.github.pagehelper.Page;
 import com.jpsoft.employment.modules.common.dto.Sort;
@@ -29,9 +25,15 @@ public class BudgetModifyRecordServiceImpl implements BudgetModifyRecordService
     @Resource(name = "templateOptionDAO")
     private TemplateOptionDAO templateOptionDAO;
 
+    @Resource(name = "templateInfoDAO")
+    private TemplateInfoDAO templateInfoDAO;
+
     @Resource(name = "fundIncomeInfoDAO")
     private FundIncomeInfoDAO fundIncomeInfoDAO;
 
+    @Resource(name = "fundExpensesInfoDAO")
+    private FundExpensesInfoDAO fundExpensesInfoDAO;
+
     @Override
     public BudgetModifyRecord get(String id) {
         // TODO Auto-generated method stub
@@ -60,8 +62,13 @@ public class BudgetModifyRecordServiceImpl implements BudgetModifyRecordService
 
         BigDecimal originalAmount = null;
 
+        String type="";
+
         if (templateOption != null) {
             originalAmount = templateOption.getBudgetRevenue();
+
+            TemplateInfo templateInfo = templateInfoDAO.get(templateOption.getTemplateId());
+            type = templateInfo.getType();
         }
 
         model.setId(UUID.randomUUID().toString());
@@ -81,14 +88,28 @@ public class BudgetModifyRecordServiceImpl implements BudgetModifyRecordService
                 templateOption.setUpdateTime(now);
                 templateOptionDAO.update(templateOption);
 
-                //修改所有由模板生成的项目预算金额
-                List<FundIncomeInfo> list = fundIncomeInfoDAO.findByTemplateOptionId(templateOption.getId());
-                for (FundIncomeInfo fundIncomeInfo : list) {
-                    fundIncomeInfo.setCurBudgetRevenue(model.getCurrentAmount());
-                    fundIncomeInfo.setUpdateBy(subject);
-                    fundIncomeInfo.setUpdateTime(now);
 
-                    fundIncomeInfoDAO.update(fundIncomeInfo);
+                if("1".equals(type)) {
+                    //修改所有由收入模板生成的项目预算收入金额
+                    List<FundIncomeInfo> list = fundIncomeInfoDAO.findByTemplateOptionId(templateOption.getId());
+                    for (FundIncomeInfo fundIncomeInfo : list) {
+                        fundIncomeInfo.setCurBudgetRevenue(model.getCurrentAmount());
+                        fundIncomeInfo.setUpdateBy(subject);
+                        fundIncomeInfo.setUpdateTime(now);
+
+                        fundIncomeInfoDAO.update(fundIncomeInfo);
+                    }
+                }
+                else if("2".equals(type)){
+                    //修改所有由支出模板生成的项目预算支出金额
+                    List<FundExpensesInfo> list = fundExpensesInfoDAO.findByTemplateOptionId(templateOption.getId());
+                    for (FundExpensesInfo fundExpensesInfo : list) {
+                        fundExpensesInfo.setCurBudgetExpenses(model.getCurrentAmount());
+                        fundExpensesInfo.setUpdateBy(subject);
+                        fundExpensesInfo.setUpdateTime(now);
+
+                        fundExpensesInfoDAO.update(fundExpensesInfo);
+                    }
                 }
             }
         }

+ 103 - 0
common/src/main/java/com/jpsoft/employment/modules/base/service/impl/ExpensesModifyRecordServiceImpl.java

@@ -0,0 +1,103 @@
+package com.jpsoft.employment.modules.base.service.impl;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import javax.annotation.Resource;
+
+import com.jpsoft.employment.modules.base.dao.FundExpensesInfoDAO;
+import com.jpsoft.employment.modules.base.entity.FundExpensesInfo;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import com.jpsoft.employment.modules.base.dao.ExpensesModifyRecordDAO;
+import com.jpsoft.employment.modules.base.entity.ExpensesModifyRecord;
+import com.jpsoft.employment.modules.base.service.ExpensesModifyRecordService;
+import com.github.pagehelper.Page;
+import com.jpsoft.employment.modules.common.dto.Sort;
+import com.github.pagehelper.PageHelper;
+
+@Transactional
+@Component(value="expensesModifyRecordService")
+public class ExpensesModifyRecordServiceImpl implements ExpensesModifyRecordService {
+	@Resource(name="expensesModifyRecordDAO")
+	private ExpensesModifyRecordDAO expensesModifyRecordDAO;
+
+	@Resource(name = "fundExpensesInfoDAO")
+	private FundExpensesInfoDAO fundExpensesInfoDAO;
+
+	@Override
+	public ExpensesModifyRecord get(String id) {
+		// TODO Auto-generated method stub
+		return expensesModifyRecordDAO.get(id);
+	}
+
+	@Override
+	public int insert(ExpensesModifyRecord model) {
+		// TODO Auto-generated method stub
+		//model.setId(UUID.randomUUID().toString());
+		
+		return expensesModifyRecordDAO.insert(model);
+	}
+
+	@Override
+	public int update(ExpensesModifyRecord model) {
+		// TODO Auto-generated method stub
+		return expensesModifyRecordDAO.update(model);		
+	}
+
+	@Override
+	public int updateAndExpensesAmount(ExpensesModifyRecord model) {
+		// TODO Auto-generated method stub
+		int count = expensesModifyRecordDAO.update(model);
+
+		if (count > 0) {
+			FundExpensesInfo fundIncomeInfo = fundExpensesInfoDAO.get(model.getExpensesId());
+			if(fundIncomeInfo!=null){
+				BigDecimal totalMonthAmount = expensesModifyRecordDAO.sumByExpensesId(model.getExpensesId());
+
+				fundIncomeInfo.setCurMonthReceived(totalMonthAmount);
+				fundIncomeInfo.setUpdateBy(model.getUpdateBy());
+				fundIncomeInfo.setUpdateTime(model.getUpdateTime());
+
+				fundExpensesInfoDAO.update(fundIncomeInfo);
+			}
+		}
+
+		return count;
+	}
+
+	@Override
+	public int delete(String id) {
+		// TODO Auto-generated method stub
+		return expensesModifyRecordDAO.delete(id);
+	}
+
+	@Override
+	public boolean exist(String id) {
+		// TODO Auto-generated method stub
+		int count = expensesModifyRecordDAO.exist(id);
+		
+		return count > 0 ? true : false;
+	}
+	
+	@Override
+	public List<ExpensesModifyRecord> list() {
+		// TODO Auto-generated method stub
+		return expensesModifyRecordDAO.list();
+	}
+
+	@Override
+	public BigDecimal findCurLastAmount(String createTime, String expensesId) {
+		return expensesModifyRecordDAO.findCurLastAmount(createTime, expensesId);
+	}
+		
+	@Override
+	public Page<ExpensesModifyRecord> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize,boolean count,List<Sort> sortList) {
+        Page<ExpensesModifyRecord> page = PageHelper.startPage(pageNumber,pageSize,count).doSelectPage(()->{
+            expensesModifyRecordDAO.search(searchParams,sortList);
+        });
+        
+        return page;
+	}
+}

+ 120 - 0
common/src/main/java/com/jpsoft/employment/modules/base/service/impl/FundExpensesInfoServiceImpl.java

@@ -0,0 +1,120 @@
+package com.jpsoft.employment.modules.base.service.impl;
+
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import javax.annotation.Resource;
+
+import com.jpsoft.employment.modules.base.dao.ExpensesModifyRecordDAO;
+import com.jpsoft.employment.modules.base.entity.ExpensesModifyRecord;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import com.jpsoft.employment.modules.base.dao.FundExpensesInfoDAO;
+import com.jpsoft.employment.modules.base.entity.FundExpensesInfo;
+import com.jpsoft.employment.modules.base.service.FundExpensesInfoService;
+import com.github.pagehelper.Page;
+import com.jpsoft.employment.modules.common.dto.Sort;
+import com.github.pagehelper.PageHelper;
+
+@Transactional
+@Component(value="fundExpensesInfoService")
+public class FundExpensesInfoServiceImpl implements FundExpensesInfoService {
+	@Resource(name="fundExpensesInfoDAO")
+	private FundExpensesInfoDAO fundExpensesInfoDAO;
+
+	@Resource(name="expensesModifyRecordDAO")
+	private ExpensesModifyRecordDAO expensesModifyRecordDAO;
+
+	@Override
+	public FundExpensesInfo get(String id) {
+		// TODO Auto-generated method stub
+		return fundExpensesInfoDAO.get(id);
+	}
+
+	@Override
+	public int insert(FundExpensesInfo model) {
+		// TODO Auto-generated method stub
+		//model.setId(UUID.randomUUID().toString());
+		
+		return fundExpensesInfoDAO.insert(model);
+	}
+
+	@Override
+	public int update(FundExpensesInfo model) {
+		// TODO Auto-generated method stub
+		String id = model.getId();
+
+		FundExpensesInfo oldItem = fundExpensesInfoDAO.get(id);
+
+		if (oldItem != null) {
+			ExpensesModifyRecord expensesModifyRecord = new ExpensesModifyRecord();
+			expensesModifyRecord.setId(UUID.randomUUID().toString());
+			expensesModifyRecord.setDelFlag(false);
+			expensesModifyRecord.setCreateBy(model.getUpdateBy());
+			expensesModifyRecord.setCreateTime(model.getUpdateTime());
+			expensesModifyRecord.setExpensesId(model.getId());
+			expensesModifyRecord.setOriginalAmount(oldItem.getCurMonthReceived());
+
+			if (oldItem.getCurMonthReceived() != null) {
+				expensesModifyRecord.setCurrentAmount(model.getCurMonthReceived().subtract(oldItem.getCurMonthReceived()));
+			} else {
+				expensesModifyRecord.setCurrentAmount(model.getCurMonthReceived());
+			}
+			expensesModifyRecordDAO.insert(expensesModifyRecord);
+		}
+
+
+		return fundExpensesInfoDAO.update(model);		
+	}
+
+	@Override
+	public int delete(String id) {
+		// TODO Auto-generated method stub
+		return fundExpensesInfoDAO.delete(id);
+	}
+
+	@Override
+	public boolean exist(String id) {
+		// TODO Auto-generated method stub
+		int count = fundExpensesInfoDAO.exist(id);
+		
+		return count > 0 ? true : false;
+	}
+	
+	@Override
+	public List<FundExpensesInfo> list() {
+		// TODO Auto-generated method stub
+		return fundExpensesInfoDAO.list();
+	}
+		
+	@Override
+	public Page<FundExpensesInfo> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize,boolean count,List<Sort> sortList) {
+        Page<FundExpensesInfo> page = PageHelper.startPage(pageNumber,pageSize,count).doSelectPage(()->{
+            fundExpensesInfoDAO.search(searchParams,sortList);
+        });
+        
+        return page;
+	}
+
+	@Override
+	public Map<String, BigDecimal> sumBudgetRevenue(String serialNumber, String startDate, String endDate, String templateId) {
+		return fundExpensesInfoDAO.sumBudgetRevenue(serialNumber, startDate, endDate, templateId);
+	}
+
+	@Override
+	public BigDecimal sumBySerialNumber(String serialNumber, String curMonth, String templateId) {
+		return fundExpensesInfoDAO.sumBySerialNumber(serialNumber, curMonth, templateId);
+	}
+
+	@Override
+	public BigDecimal sumByTemplateOptionId(String templateOptionId, String startDate, String endDate) {
+		return fundExpensesInfoDAO.sumByTemplateOptionId(templateOptionId, startDate, endDate);
+	}
+
+	@Override
+	public FundExpensesInfo findOneByTemplateOptionId(String templateOptionId, String startDate, String endDate) {
+		return fundExpensesInfoDAO.findOneByTemplateOptionId(templateOptionId, startDate, endDate);
+	}
+
+}

+ 235 - 103
common/src/main/java/com/jpsoft/employment/modules/base/service/impl/FundIncomeInfoServiceImpl.java

@@ -31,6 +31,9 @@ public class FundIncomeInfoServiceImpl implements FundIncomeInfoService {
     @Resource(name = "fundIncomeInfoDAO")
     private FundIncomeInfoDAO fundIncomeInfoDAO;
 
+    @Resource(name = "fundExpensesInfoDAO")
+    private FundExpensesInfoDAO fundExpensesInfoDAO;
+
     @Resource(name = "templateOptionDAO")
     private TemplateOptionDAO templateOptionDAO;
 
@@ -40,6 +43,8 @@ public class FundIncomeInfoServiceImpl implements FundIncomeInfoService {
     @Resource(name = "incomeModifyRecordDAO")
     private IncomeModifyRecordDAO incomeModifyRecordDAO;
 
+;
+
     @Resource(name = "budgetModifyRecordDAO")
     private BudgetModifyRecordDAO budgetModifyRecordDAO;
 
@@ -94,6 +99,7 @@ public class FundIncomeInfoServiceImpl implements FundIncomeInfoService {
 
         TemplateInfo templateInfo = templateInfoDAO.get(templateId);
         String year = templateInfo.getYear();
+        String type = templateInfo.getType();
 
         String startDate = year + "-01" + "-01";
         String endDate = year + "-12" + "-31";
@@ -103,125 +109,251 @@ public class FundIncomeInfoServiceImpl implements FundIncomeInfoService {
             endDate = sdf2.format(templateInfo.getEndDate());
         }
 
+        //为收入模板,生成收入项目
+        if("1".equals(type)) {
 
-        List<FundIncomeInfo> fundIncomeInfoList = fundIncomeInfoDAO.findByYear(startDate, endDate, templateId);
+            List<FundIncomeInfo> fundIncomeInfoList = fundIncomeInfoDAO.findByYear(startDate, endDate, templateId);
 
-        for (FundIncomeInfo item : fundIncomeInfoList) {
-            item.setDelFlag(true);
-            item.setUpdateBy(subject);
-            item.setUpdateTime(new Date());
-            fundIncomeInfoDAO.update(item);
+            for (FundIncomeInfo item : fundIncomeInfoList) {
+                item.setDelFlag(true);
+                item.setUpdateBy(subject);
+                item.setUpdateTime(new Date());
+                fundIncomeInfoDAO.update(item);
 
-            List<BudgetModifyRecord> budgetModifyRecordList = budgetModifyRecordDAO.findByBudgetId(item.getTemplateOptionId());
-            for (BudgetModifyRecord budgetModifyRecord : budgetModifyRecordList) {
-                budgetModifyRecord.setDelFlag(true);
-                budgetModifyRecord.setUpdateBy(subject);
-                budgetModifyRecord.setUpdateTime(new Date());
-                budgetModifyRecordDAO.update(budgetModifyRecord);
+                List<BudgetModifyRecord> budgetModifyRecordList = budgetModifyRecordDAO.findByBudgetId(item.getTemplateOptionId());
+                for (BudgetModifyRecord budgetModifyRecord : budgetModifyRecordList) {
+                    budgetModifyRecord.setDelFlag(true);
+                    budgetModifyRecord.setUpdateBy(subject);
+                    budgetModifyRecord.setUpdateTime(new Date());
+                    budgetModifyRecordDAO.update(budgetModifyRecord);
+                }
             }
-        }
 
-        List<TemplateOption> templateOptionList = templateOptionDAO.findByTemplateId(templateId);
-
-        if(templateInfo.getStartDate() != null && templateInfo.getEndDate() != null){
-            //已填写日期区间范围,生成日期区间范围的数据
-            // 定义日期格式
-            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-            // 将字符串转换为 LocalDate 对象
-            LocalDate startLocalDate = LocalDate.parse(startDate, formatter);
-            LocalDate endLocalDate = LocalDate.parse(endDate, formatter);
-
-            YearMonth startYearMonth = YearMonth.from(startLocalDate);
-            YearMonth endYearMonth = YearMonth.from(endLocalDate);
-
-            // 从开始的年月开始,逐个增加月份并输出,直到达到结束的年月
-            for (YearMonth current = startYearMonth;!current.isAfter(endYearMonth); current = current.plusMonths(1)) {
-                System.out.println(current);
-
-                for (TemplateOption templateOption : templateOptionList) {
-                    FundIncomeInfo fundIncomeInfo = new FundIncomeInfo();
-                    fundIncomeInfo.setId(UUID.randomUUID().toString());
-                    fundIncomeInfo.setName(templateOption.getName());
-                    fundIncomeInfo.setDelFlag(false);
-                    fundIncomeInfo.setCreateBy(subject);
-                    fundIncomeInfo.setCreateTime(new Date());
-                    fundIncomeInfo.setSerialNumber(templateOption.getSerialNum());
-
-                    //转换日期格式
-                    ZonedDateTime zonedDateTime = current.atDay(1).atStartOfDay(ZoneId.systemDefault());
-                    java.time.Instant instant = zonedDateTime.toInstant();
-                    // 使用 Date 的 from 方法将 Instant 转换为 Date
-                    Date date = Date.from(instant);
-
-                    fundIncomeInfo.setYear(date);
-                    fundIncomeInfo.setIndex(templateOption.getIndex());
-                    fundIncomeInfo.setBudgetRevenue(templateOption.getBudgetRevenue());
-                    fundIncomeInfo.setCurBudgetRevenue(templateOption.getBudgetRevenue());
-                    fundIncomeInfo.setTemplateId(templateId);
-                    fundIncomeInfo.setIncomeTimeRange(templateOption.getIncomeTimeRange());
-                    fundIncomeInfo.setEndDate(templateOption.getEndDate());
-                    fundIncomeInfo.setIncomeType(templateOption.getIncomeType());
-                    fundIncomeInfo.setChargePerson(templateOption.getChargePerson());
-                    fundIncomeInfo.setTemplateOptionId(templateOption.getId());
-
-                    if (StringUtils.isNotEmpty(templateInfo.getAttachment())) {
-                        fundIncomeInfo.setAttachment(templateInfo.getAttachment());
+            List<TemplateOption> templateOptionList = templateOptionDAO.findByTemplateId(templateId);
+
+            if (templateInfo.getStartDate() != null && templateInfo.getEndDate() != null) {
+                //已填写日期区间范围,生成日期区间范围的数据
+                // 定义日期格式
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                // 将字符串转换为 LocalDate 对象
+                LocalDate startLocalDate = LocalDate.parse(startDate, formatter);
+                LocalDate endLocalDate = LocalDate.parse(endDate, formatter);
+
+                YearMonth startYearMonth = YearMonth.from(startLocalDate);
+                YearMonth endYearMonth = YearMonth.from(endLocalDate);
+
+                // 从开始的年月开始,逐个增加月份并输出,直到达到结束的年月
+                for (YearMonth current = startYearMonth; !current.isAfter(endYearMonth); current = current.plusMonths(1)) {
+                    System.out.println(current);
+
+                    for (TemplateOption templateOption : templateOptionList) {
+                        FundIncomeInfo fundIncomeInfo = new FundIncomeInfo();
+                        fundIncomeInfo.setId(UUID.randomUUID().toString());
+                        fundIncomeInfo.setName(templateOption.getName());
+                        fundIncomeInfo.setDelFlag(false);
+                        fundIncomeInfo.setCreateBy(subject);
+                        fundIncomeInfo.setCreateTime(new Date());
+                        fundIncomeInfo.setSerialNumber(templateOption.getSerialNum());
+
+                        //转换日期格式
+                        ZonedDateTime zonedDateTime = current.atDay(1).atStartOfDay(ZoneId.systemDefault());
+                        java.time.Instant instant = zonedDateTime.toInstant();
+                        // 使用 Date 的 from 方法将 Instant 转换为 Date
+                        Date date = Date.from(instant);
+
+                        fundIncomeInfo.setYear(date);
+                        fundIncomeInfo.setIndex(templateOption.getIndex());
+                        fundIncomeInfo.setBudgetRevenue(templateOption.getBudgetRevenue());
+                        fundIncomeInfo.setCurBudgetRevenue(templateOption.getBudgetRevenue());
+                        fundIncomeInfo.setTemplateId(templateId);
+                        fundIncomeInfo.setIncomeTimeRange(templateOption.getIncomeTimeRange());
+                        fundIncomeInfo.setEndDate(templateOption.getEndDate());
+                        fundIncomeInfo.setIncomeType(templateOption.getIncomeType());
+                        fundIncomeInfo.setChargePerson(templateOption.getChargePerson());
+                        fundIncomeInfo.setTemplateOptionId(templateOption.getId());
+
+                        if (StringUtils.isNotEmpty(templateInfo.getAttachment())) {
+                            fundIncomeInfo.setAttachment(templateInfo.getAttachment());
+                        }
+
+                        if (templateOption.getIsSum() != null) {
+                            fundIncomeInfo.setIsSum(templateOption.getIsSum());
+                        }
+
+                        if (StringUtils.isNotEmpty(templateOption.getDepartmentIds())) {
+                            fundIncomeInfo.setIncomeDepartment(templateOption.getDepartmentIds());
+                        }
+
+                        count += fundIncomeInfoDAO.insert(fundIncomeInfo);
                     }
-
-                    if (templateOption.getIsSum() != null) {
-                        fundIncomeInfo.setIsSum(templateOption.getIsSum());
+                }
+            } else {
+                //未填写日期区间范围,生成一年的数据
+                for (int i = 1; i <= 12; i++) {
+                    String yearMonth = year;
+                    if (i < 10) {
+                        yearMonth += "-0" + String.valueOf(i) + "-01";
+                    } else {
+                        yearMonth += "-" + String.valueOf(i) + "-01";
                     }
 
-                    if (StringUtils.isNotEmpty(templateOption.getDepartmentIds())) {
-                        fundIncomeInfo.setIncomeDepartment(templateOption.getDepartmentIds());
+                    for (TemplateOption templateOption : templateOptionList) {
+                        FundIncomeInfo fundIncomeInfo = new FundIncomeInfo();
+                        fundIncomeInfo.setId(UUID.randomUUID().toString());
+                        fundIncomeInfo.setName(templateOption.getName());
+                        fundIncomeInfo.setDelFlag(false);
+                        fundIncomeInfo.setCreateBy(subject);
+                        fundIncomeInfo.setCreateTime(new Date());
+                        fundIncomeInfo.setSerialNumber(templateOption.getSerialNum());
+                        fundIncomeInfo.setYear(sdf2.parse(yearMonth));
+                        fundIncomeInfo.setIndex(templateOption.getIndex());
+                        fundIncomeInfo.setBudgetRevenue(templateOption.getBudgetRevenue());
+                        fundIncomeInfo.setCurBudgetRevenue(templateOption.getBudgetRevenue());
+                        fundIncomeInfo.setTemplateId(templateId);
+                        fundIncomeInfo.setIncomeTimeRange(templateOption.getIncomeTimeRange());
+                        fundIncomeInfo.setEndDate(templateOption.getEndDate());
+                        fundIncomeInfo.setIncomeType(templateOption.getIncomeType());
+                        fundIncomeInfo.setChargePerson(templateOption.getChargePerson());
+                        fundIncomeInfo.setTemplateOptionId(templateOption.getId());
+
+                        if (StringUtils.isNotEmpty(templateInfo.getAttachment())) {
+                            fundIncomeInfo.setAttachment(templateInfo.getAttachment());
+                        }
+
+                        if (templateOption.getIsSum() != null) {
+                            fundIncomeInfo.setIsSum(templateOption.getIsSum());
+                        }
+
+                        if (StringUtils.isNotEmpty(templateOption.getDepartmentIds())) {
+                            fundIncomeInfo.setIncomeDepartment(templateOption.getDepartmentIds());
+                        }
+
+                        count += fundIncomeInfoDAO.insert(fundIncomeInfo);
                     }
-
-                    count += fundIncomeInfoDAO.insert(fundIncomeInfo);
                 }
             }
         }
-        else{
-            //未填写日期区间范围,生成一年的数据
-            for (int i = 1; i <= 12; i++) {
-                String yearMonth = year;
-                if (i < 10) {
-                    yearMonth += "-0" + String.valueOf(i) + "-01";
-                } else {
-                    yearMonth += "-" + String.valueOf(i) + "-01";
+        else if("2".equals(type)){
+            //为支出模板,生成支出项目
+            List<FundExpensesInfo> fundExpensesInfoList = fundExpensesInfoDAO.findByYear(startDate, endDate, templateId);
+
+            for (FundExpensesInfo item : fundExpensesInfoList) {
+                item.setDelFlag(true);
+                item.setUpdateBy(subject);
+                item.setUpdateTime(new Date());
+                fundExpensesInfoDAO.update(item);
+
+                List<BudgetModifyRecord> budgetModifyRecordList = budgetModifyRecordDAO.findByBudgetId(item.getTemplateOptionId());
+                for (BudgetModifyRecord budgetModifyRecord : budgetModifyRecordList) {
+                    budgetModifyRecord.setDelFlag(true);
+                    budgetModifyRecord.setUpdateBy(subject);
+                    budgetModifyRecord.setUpdateTime(new Date());
+                    budgetModifyRecordDAO.update(budgetModifyRecord);
                 }
+            }
 
-                for (TemplateOption templateOption : templateOptionList) {
-                    FundIncomeInfo fundIncomeInfo = new FundIncomeInfo();
-                    fundIncomeInfo.setId(UUID.randomUUID().toString());
-                    fundIncomeInfo.setName(templateOption.getName());
-                    fundIncomeInfo.setDelFlag(false);
-                    fundIncomeInfo.setCreateBy(subject);
-                    fundIncomeInfo.setCreateTime(new Date());
-                    fundIncomeInfo.setSerialNumber(templateOption.getSerialNum());
-                    fundIncomeInfo.setYear(sdf2.parse(yearMonth));
-                    fundIncomeInfo.setIndex(templateOption.getIndex());
-                    fundIncomeInfo.setBudgetRevenue(templateOption.getBudgetRevenue());
-                    fundIncomeInfo.setCurBudgetRevenue(templateOption.getBudgetRevenue());
-                    fundIncomeInfo.setTemplateId(templateId);
-                    fundIncomeInfo.setIncomeTimeRange(templateOption.getIncomeTimeRange());
-                    fundIncomeInfo.setEndDate(templateOption.getEndDate());
-                    fundIncomeInfo.setIncomeType(templateOption.getIncomeType());
-                    fundIncomeInfo.setChargePerson(templateOption.getChargePerson());
-                    fundIncomeInfo.setTemplateOptionId(templateOption.getId());
-
-                    if (StringUtils.isNotEmpty(templateInfo.getAttachment())) {
-                        fundIncomeInfo.setAttachment(templateInfo.getAttachment());
+            List<TemplateOption> templateOptionList = templateOptionDAO.findByTemplateId(templateId);
+
+
+            if (templateInfo.getStartDate() != null && templateInfo.getEndDate() != null) {
+                //已填写日期区间范围,生成日期区间范围的数据
+                // 定义日期格式
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                // 将字符串转换为 LocalDate 对象
+                LocalDate startLocalDate = LocalDate.parse(startDate, formatter);
+                LocalDate endLocalDate = LocalDate.parse(endDate, formatter);
+
+                YearMonth startYearMonth = YearMonth.from(startLocalDate);
+                YearMonth endYearMonth = YearMonth.from(endLocalDate);
+
+                // 从开始的年月开始,逐个增加月份并输出,直到达到结束的年月
+                for (YearMonth current = startYearMonth; !current.isAfter(endYearMonth); current = current.plusMonths(1)) {
+                    System.out.println(current);
+
+                    for (TemplateOption templateOption : templateOptionList) {
+                        FundExpensesInfo fundExpensesInfo = new FundExpensesInfo();
+                        fundExpensesInfo.setId(UUID.randomUUID().toString());
+                        fundExpensesInfo.setName(templateOption.getName());
+                        fundExpensesInfo.setDelFlag(false);
+                        fundExpensesInfo.setCreateBy(subject);
+                        fundExpensesInfo.setCreateTime(new Date());
+                        fundExpensesInfo.setSerialNumber(templateOption.getSerialNum());
+
+                        //转换日期格式
+                        ZonedDateTime zonedDateTime = current.atDay(1).atStartOfDay(ZoneId.systemDefault());
+                        java.time.Instant instant = zonedDateTime.toInstant();
+                        // 使用 Date 的 from 方法将 Instant 转换为 Date
+                        Date date = Date.from(instant);
+
+                        fundExpensesInfo.setYear(date);
+                        fundExpensesInfo.setIndex(templateOption.getIndex());
+                        fundExpensesInfo.setBudgetExpenses(templateOption.getBudgetRevenue());
+                        fundExpensesInfo.setCurBudgetExpenses(templateOption.getBudgetRevenue());
+                        fundExpensesInfo.setTemplateId(templateId);
+                        fundExpensesInfo.setExpensesTimeRange(templateOption.getIncomeTimeRange());
+                        fundExpensesInfo.setEndDate(templateOption.getEndDate());
+                        fundExpensesInfo.setExpensesType(templateOption.getIncomeType());
+                        fundExpensesInfo.setChargePerson(templateOption.getChargePerson());
+                        fundExpensesInfo.setTemplateOptionId(templateOption.getId());
+
+                        if (StringUtils.isNotEmpty(templateInfo.getAttachment())) {
+                            fundExpensesInfo.setAttachment(templateInfo.getAttachment());
+                        }
+
+                        if (templateOption.getIsSum() != null) {
+                            fundExpensesInfo.setIsSum(templateOption.getIsSum());
+                        }
+
+                        if (StringUtils.isNotEmpty(templateOption.getDepartmentIds())) {
+                            fundExpensesInfo.setExpensesDepartment(templateOption.getDepartmentIds());
+                        }
+
+                        count += fundExpensesInfoDAO.insert(fundExpensesInfo);
                     }
-
-                    if (templateOption.getIsSum() != null) {
-                        fundIncomeInfo.setIsSum(templateOption.getIsSum());
+                }
+            } else {
+                //未填写日期区间范围,生成一年的数据
+                for (int i = 1; i <= 12; i++) {
+                    String yearMonth = year;
+                    if (i < 10) {
+                        yearMonth += "-0" + String.valueOf(i) + "-01";
+                    } else {
+                        yearMonth += "-" + String.valueOf(i) + "-01";
                     }
 
-                    if (StringUtils.isNotEmpty(templateOption.getDepartmentIds())) {
-                        fundIncomeInfo.setIncomeDepartment(templateOption.getDepartmentIds());
+                    for (TemplateOption templateOption : templateOptionList) {
+                        FundExpensesInfo fundExpensesInfo = new FundExpensesInfo();
+                        fundExpensesInfo.setId(UUID.randomUUID().toString());
+                        fundExpensesInfo.setName(templateOption.getName());
+                        fundExpensesInfo.setDelFlag(false);
+                        fundExpensesInfo.setCreateBy(subject);
+                        fundExpensesInfo.setCreateTime(new Date());
+                        fundExpensesInfo.setSerialNumber(templateOption.getSerialNum());
+                        fundExpensesInfo.setYear(sdf2.parse(yearMonth));
+                        fundExpensesInfo.setIndex(templateOption.getIndex());
+                        fundExpensesInfo.setBudgetExpenses(templateOption.getBudgetRevenue());
+                        fundExpensesInfo.setCurBudgetExpenses(templateOption.getBudgetRevenue());
+                        fundExpensesInfo.setTemplateId(templateId);
+                        fundExpensesInfo.setExpensesTimeRange(templateOption.getIncomeTimeRange());
+                        fundExpensesInfo.setEndDate(templateOption.getEndDate());
+                        fundExpensesInfo.setExpensesType(templateOption.getIncomeType());
+                        fundExpensesInfo.setChargePerson(templateOption.getChargePerson());
+                        fundExpensesInfo.setTemplateOptionId(templateOption.getId());
+
+                        if (StringUtils.isNotEmpty(templateInfo.getAttachment())) {
+                            fundExpensesInfo.setAttachment(templateInfo.getAttachment());
+                        }
+
+                        if (templateOption.getIsSum() != null) {
+                            fundExpensesInfo.setIsSum(templateOption.getIsSum());
+                        }
+
+                        if (StringUtils.isNotEmpty(templateOption.getDepartmentIds())) {
+                            fundExpensesInfo.setExpensesDepartment(templateOption.getDepartmentIds());
+                        }
+
+                        count += fundExpensesInfoDAO.insert(fundExpensesInfo);
                     }
-
-                    count += fundIncomeInfoDAO.insert(fundIncomeInfo);
                 }
             }
         }
@@ -268,8 +400,8 @@ public class FundIncomeInfoServiceImpl implements FundIncomeInfoService {
     }
 
     @Override
-    public Map<String, BigDecimal> sumBudgetRevenue2(String serialNumber, String startDate, String endDate, String templateId,String serialNumberStr) {
-        return fundIncomeInfoDAO.sumBudgetRevenue2(serialNumber, startDate, endDate, templateId,serialNumberStr);
+    public Map<String, BigDecimal> sumBudgetRevenue2(String serialNumber, String startDate, String endDate, String templateId, String serialNumberStr) {
+        return fundIncomeInfoDAO.sumBudgetRevenue2(serialNumber, startDate, endDate, templateId, serialNumberStr);
     }
 
     @Override

+ 111 - 0
common/src/main/resources/mapper/base/ExpensesModifyRecord.xml

@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- namespace必须指向DAO接口 -->
+<mapper namespace="com.jpsoft.employment.modules.base.dao.ExpensesModifyRecordDAO">
+	<resultMap id="ExpensesModifyRecordMap" type="com.jpsoft.employment.modules.base.entity.ExpensesModifyRecord">
+		<id property="id" column="id_" />
+			<result property="expensesId" column="expenses_id" />
+			<result property="originalAmount" column="original_amount" />
+			<result property="currentAmount" column="current_amount" />
+			<result property="createTime" column="create_time" />
+			<result property="updateTime" column="update_time" />
+			<result property="createBy" column="create_by" />
+			<result property="updateBy" column="update_by" />
+			<result property="delFlag" column="del_flag" />
+			</resultMap>
+	<insert id="insert" parameterType="com.jpsoft.employment.modules.base.entity.ExpensesModifyRecord">
+	<!--
+	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+		select sys_guid() from dual
+	</selectKey>
+	-->
+	<![CDATA[
+		insert into base_expenses_modify_record
+	    (id_,expenses_id,original_amount,current_amount,create_time,update_time,create_by,update_by,del_flag)
+		values
+		(
+#{id,jdbcType=VARCHAR}
+,#{expensesId,jdbcType=VARCHAR}
+,#{originalAmount,jdbcType= NUMERIC }
+,#{currentAmount,jdbcType= NUMERIC }
+,#{createTime,jdbcType= TIMESTAMP }
+,#{updateTime,jdbcType= TIMESTAMP }
+,#{createBy,jdbcType=VARCHAR}
+,#{updateBy,jdbcType=VARCHAR}
+,#{delFlag,jdbcType= NUMERIC }
+		)
+	]]>
+	</insert>
+	<delete id="delete" parameterType="string">
+		delete from base_expenses_modify_record where id_=#{id,jdbcType=VARCHAR}
+	</delete>
+	<update id="update" parameterType="com.jpsoft.employment.modules.base.entity.ExpensesModifyRecord">
+		update base_expenses_modify_record
+		<set>
+				<if test="expensesId!=null">
+		expenses_id=#{expensesId,jdbcType=VARCHAR},
+		</if>
+				<if test="originalAmount!=null">
+		original_amount=#{originalAmount,jdbcType= NUMERIC },
+		</if>
+				<if test="currentAmount!=null">
+		current_amount=#{currentAmount,jdbcType= NUMERIC },
+		</if>
+				<if test="createTime!=null">
+		create_time=#{createTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="updateTime!=null">
+		update_time=#{updateTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="createBy!=null">
+		create_by=#{createBy,jdbcType=VARCHAR},
+		</if>
+				<if test="updateBy!=null">
+		update_by=#{updateBy,jdbcType=VARCHAR},
+		</if>
+				<if test="delFlag!=null">
+		del_flag=#{delFlag,jdbcType= NUMERIC },
+		</if>
+		</set>
+	where id_=#{id}
+	</update>
+	<select id="get" parameterType="string" resultMap="ExpensesModifyRecordMap">
+		select * from base_expenses_modify_record where id_=#{0}
+	</select>
+	<select id="exist" parameterType="string" resultType="int">
+		select count(*) from base_expenses_modify_record where id_=#{0}
+	</select>
+	<select id="list" resultMap="ExpensesModifyRecordMap">
+		select * from base_expenses_modify_record
+	</select>
+	<select id="findCurLastAmount" resultType="java.math.BigDecimal">
+		<![CDATA[
+			select sum(current_amount) from base_expenses_modify_record
+			where del_flag=false
+			and create_time <= #{createTime}
+			and expenses_id = #{expensesId}
+		]]>
+	</select>
+	<select id="sumByExpensesId" resultType="java.math.BigDecimal">
+		<![CDATA[
+			select sum(current_amount) from base_expenses_modify_record
+			where del_flag=false
+			and expenses_id = #{0}
+		]]>
+	</select>
+	<select id="search" parameterType="hashmap" resultMap="ExpensesModifyRecordMap">
+		<![CDATA[
+			select * from base_expenses_modify_record
+		]]>
+		<where>
+			del_flag=false
+			<if test="searchParams.expensesId != null">
+				and expenses_id = #{searchParams.expensesId}
+			</if>
+		</where>
+		<foreach item="sort" collection="sortList"  open="order by" separator=",">
+	        ${sort.name} ${sort.order}
+	 	</foreach>
+	</select>
+</mapper>

+ 287 - 0
common/src/main/resources/mapper/base/FundExpensesInfo.xml

@@ -0,0 +1,287 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!-- namespace必须指向DAO接口 -->
+<mapper namespace="com.jpsoft.employment.modules.base.dao.FundExpensesInfoDAO">
+	<resultMap id="FundExpensesInfoMap" type="com.jpsoft.employment.modules.base.entity.FundExpensesInfo">
+		<id property="id" column="id_" />
+			<result property="serialNumber" column="serial_number" />
+			<result property="name" column="name_" />
+			<result property="budgetExpenses" column="budget_expenses" />
+			<result property="accountName" column="account_name" />
+			<result property="curMonthReceived" column="cur_month_received" />
+			<result property="actualTotalRevenue" column="actual_total_revenue" />
+			<result property="accumulatedArrears" column="accumulated_arrears" />
+			<result property="expensesTimeRange" column="expenses_time_range" />
+			<result property="expensesType" column="expenses_type" />
+			<result property="endDate" column="end_date" />
+			<result property="expensesDepartment" column="expenses_department" />
+			<result property="attachment" column="attachment_" />
+			<result property="accountingName" column="accounting_Name" />
+			<result property="bak" column="bak_" />
+			<result property="createTime" column="create_time" />
+			<result property="updateTime" column="update_time" />
+			<result property="createBy" column="create_by" />
+			<result property="updateBy" column="update_by" />
+			<result property="delFlag" column="del_flag" />
+			<result property="year" column="year_" />
+			<result property="index" column="index_" />
+			<result property="templateId" column="template_id" />
+			<result property="isSum" column="is_sum" />
+			<result property="chargePerson" column="charge_person" />
+			<result property="curBudgetExpenses" column="cur_budget_expenses" />
+			<result property="templateOptionId" column="template_option_id" />
+			<result property="isCountSummary" column="is_count_summary" />
+			</resultMap>
+	<insert id="insert" parameterType="com.jpsoft.employment.modules.base.entity.FundExpensesInfo">
+	<!--
+	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+		select sys_guid() from dual
+	</selectKey>
+	-->
+	<![CDATA[
+		insert into base_fund_expenses_info
+	    (id_,serial_number,name_,budget_expenses,account_name,cur_month_received,actual_total_revenue,accumulated_arrears,expenses_time_range,expenses_type,end_date,expenses_department,attachment_,accounting_Name,bak_,create_time,update_time,create_by,update_by,del_flag,year_,index_,template_id,is_sum,charge_person,cur_budget_expenses,template_option_id,is_count_summary)
+		values
+		(
+#{id,jdbcType=VARCHAR}
+,#{serialNumber,jdbcType=VARCHAR}
+,#{name,jdbcType=VARCHAR}
+,#{budgetExpenses,jdbcType= NUMERIC }
+,#{accountName,jdbcType=VARCHAR}
+,#{curMonthReceived,jdbcType= NUMERIC }
+,#{actualTotalRevenue,jdbcType= NUMERIC }
+,#{accumulatedArrears,jdbcType= NUMERIC }
+,#{expensesTimeRange,jdbcType=VARCHAR}
+,#{expensesType,jdbcType=VARCHAR}
+,#{endDate,jdbcType= TIMESTAMP }
+,#{expensesDepartment,jdbcType=VARCHAR}
+,#{attachment,jdbcType=VARCHAR}
+,#{accountingName,jdbcType=VARCHAR}
+,#{bak,jdbcType=VARCHAR}
+,#{createTime,jdbcType= TIMESTAMP }
+,#{updateTime,jdbcType= TIMESTAMP }
+,#{createBy,jdbcType=VARCHAR}
+,#{updateBy,jdbcType=VARCHAR}
+,#{delFlag,jdbcType= NUMERIC }
+,#{year,jdbcType= TIMESTAMP }
+,#{index,jdbcType= NUMERIC }
+,#{templateId,jdbcType=VARCHAR}
+,#{isSum,jdbcType= NUMERIC }
+,#{chargePerson,jdbcType=VARCHAR}
+,#{curBudgetExpenses,jdbcType= NUMERIC }
+,#{templateOptionId,jdbcType=VARCHAR}
+,#{isCountSummary,jdbcType= NUMERIC }
+		)
+	]]>
+	</insert>
+	<delete id="delete" parameterType="string">
+		delete from base_fund_expenses_info where id_=#{id,jdbcType=VARCHAR}
+	</delete>
+	<update id="update" parameterType="com.jpsoft.employment.modules.base.entity.FundExpensesInfo">
+		update base_fund_expenses_info
+		<set>
+				<if test="serialNumber!=null">
+		serial_number=#{serialNumber,jdbcType=VARCHAR},
+		</if>
+				<if test="name!=null">
+		name_=#{name,jdbcType=VARCHAR},
+		</if>
+				<if test="budgetExpenses!=null">
+		budget_expenses=#{budgetExpenses,jdbcType= NUMERIC },
+		</if>
+				<if test="accountName!=null">
+		account_name=#{accountName,jdbcType=VARCHAR},
+		</if>
+				<if test="curMonthReceived!=null">
+		cur_month_received=#{curMonthReceived,jdbcType= NUMERIC },
+		</if>
+				<if test="actualTotalRevenue!=null">
+		actual_total_revenue=#{actualTotalRevenue,jdbcType= NUMERIC },
+		</if>
+				<if test="accumulatedArrears!=null">
+		accumulated_arrears=#{accumulatedArrears,jdbcType= NUMERIC },
+		</if>
+				<if test="expensesTimeRange!=null">
+		expenses_time_range=#{expensesTimeRange,jdbcType=VARCHAR},
+		</if>
+				<if test="expensesType!=null">
+		expenses_type=#{expensesType,jdbcType=VARCHAR},
+		</if>
+				<if test="endDate!=null">
+		end_date=#{endDate,jdbcType= TIMESTAMP },
+		</if>
+				<if test="expensesDepartment!=null">
+		expenses_department=#{expensesDepartment,jdbcType=VARCHAR},
+		</if>
+				<if test="attachment!=null">
+		attachment_=#{attachment,jdbcType=VARCHAR},
+		</if>
+				<if test="accountingName!=null">
+		accounting_Name=#{accountingName,jdbcType=VARCHAR},
+		</if>
+				<if test="bak!=null">
+		bak_=#{bak,jdbcType=VARCHAR},
+		</if>
+				<if test="createTime!=null">
+		create_time=#{createTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="updateTime!=null">
+		update_time=#{updateTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="createBy!=null">
+		create_by=#{createBy,jdbcType=VARCHAR},
+		</if>
+				<if test="updateBy!=null">
+		update_by=#{updateBy,jdbcType=VARCHAR},
+		</if>
+				<if test="delFlag!=null">
+		del_flag=#{delFlag,jdbcType= NUMERIC },
+		</if>
+				<if test="year!=null">
+		year_=#{year,jdbcType= TIMESTAMP },
+		</if>
+				<if test="index!=null">
+		index_=#{index,jdbcType= NUMERIC },
+		</if>
+				<if test="templateId!=null">
+		template_id=#{templateId,jdbcType=VARCHAR},
+		</if>
+				<if test="isSum!=null">
+		is_sum=#{isSum,jdbcType= NUMERIC },
+		</if>
+				<if test="chargePerson!=null">
+		charge_person=#{chargePerson,jdbcType=VARCHAR},
+		</if>
+				<if test="curBudgetExpenses!=null">
+		cur_budget_expenses=#{curBudgetExpenses,jdbcType= NUMERIC },
+		</if>
+				<if test="templateOptionId!=null">
+		template_option_id=#{templateOptionId,jdbcType=VARCHAR},
+		</if>
+				<if test="isCountSummary!=null">
+		is_count_summary=#{isCountSummary,jdbcType= NUMERIC },
+		</if>
+		</set>
+	where id_=#{id}
+	</update>
+	<select id="get" parameterType="string" resultMap="FundExpensesInfoMap">
+		select * from base_fund_expenses_info where id_=#{0}
+	</select>
+	<select id="exist" parameterType="string" resultType="int">
+		select count(*) from base_fund_expenses_info where id_=#{0}
+	</select>
+	<select id="list" resultMap="FundExpensesInfoMap">
+		select * from base_fund_expenses_info
+	</select>
+	<select id="findByTemplateOptionId" resultMap="FundExpensesInfoMap">
+		select * from base_fund_expenses_info
+		where del_flag=false and template_option_id = #{templateOptionId}
+		order by create_time
+	</select>
+	<select id="findByYear" resultMap="FundExpensesInfoMap">
+		<![CDATA[
+			select * from base_fund_expenses_info
+			where del_flag=false
+			and year_>=#{startDate}
+			and year_<=#{endDate}
+			and template_id=#{templateId}
+			order by create_time
+		]]>
+	</select>
+	<select id="sumBySerialNumber" resultType="java.math.BigDecimal">
+		<![CDATA[
+			select IFNULL(sum(cur_month_received),0) from base_fund_expenses_info
+		]]>
+		<where>
+			del_flag=false
+			<if test="serialNumber != null">
+				and serial_number like #{serialNumber}
+			</if>
+			<![CDATA[
+				and year_<=#{curMonth}
+				and template_id=#{templateId}
+			]]>
+		</where>
+		order by create_time
+	</select>
+	<select id="sumByTemplateOptionId" resultType="java.math.BigDecimal">
+		select IFNULL(sum(cur_month_received),0) from base_fund_expenses_info
+		<where>
+			<![CDATA[
+				del_flag=false
+				and year_>=#{startDate}
+				and year_<=#{endDate}
+				and template_option_id = #{templateOptionId}
+			]]>
+		</where>
+	</select>
+	<select id="findOneByTemplateOptionId" resultMap="FundExpensesInfoMap">
+		select * from base_fund_expenses_info
+		<where>
+			<![CDATA[
+				del_flag=false
+				and year_>=#{startDate}
+				and year_<=#{endDate}
+				and template_option_id = #{templateOptionId}
+			]]>
+		</where>
+		limit 1
+	</select>
+	<select id="sumBudgetRevenue" resultType="java.util.Map">
+		<![CDATA[
+			select
+			IFNULL(sum(budget_expenses),0) as 'sumBudget',
+			IFNULL(sum(cur_budget_expenses),0) as 'sumCurBudgetExpenses',
+			IFNULL(sum(cur_month_received),0) as 'sumCurMonthReceived'
+			from base_fund_expenses_info
+		]]>
+		<where>
+			del_flag=false
+			<if test="serialNumber != null">
+				and serial_number like #{serialNumber}
+			</if>
+			<![CDATA[
+					and year_>=#{startDate}
+					and year_<=#{endDate}
+					and template_id=#{templateId}
+				]]>
+		</where>
+		order by create_time
+	</select>
+	<select id="search" parameterType="hashmap" resultMap="FundExpensesInfoMap">
+		<![CDATA[
+			select * from base_fund_expenses_info
+		]]>
+		<where>
+			del_flag=false
+			<if test="searchParams.startDate != null">
+				<![CDATA[
+					and year_>=#{searchParams.startDate}
+				]]>
+			</if>
+			<if test="searchParams.endDate != null">
+				<![CDATA[
+					and year_<=#{searchParams.endDate}
+				]]>
+			</if>
+			<if test="searchParams.templateId != null">
+				and template_id = #{searchParams.templateId}
+			</if>
+			<if test="searchParams.name != null">
+				and name_ like #{searchParams.name}
+			</if>
+			<if test="searchParams.serialNum != null">
+				and serial_number like #{searchParams.serialNum}
+			</if>
+			<if test="searchParams.templateOptionList != null">
+				<foreach item="item" collection="searchParams.templateOptionList"  open="and template_option_id in (" separator="," close=")">
+					#{item}
+				</foreach>
+			</if>
+		</where>
+		<foreach item="sort" collection="sortList"  open="order by" separator=",">
+	        ${sort.name} ${sort.order}
+	 	</foreach>
+	</select>
+</mapper>

+ 0 - 1
common/src/main/resources/mapper/base/FundIncomeInfo.xml

@@ -248,7 +248,6 @@
 				]]>
 			</where>
 			order by create_time
-
 	</select>
 	<select id="sumBudgetRevenue2" resultType="java.util.Map">
 		<![CDATA[

+ 3 - 0
common/src/main/resources/mapper/base/TemplateInfo.xml

@@ -114,6 +114,9 @@
 			<if test="searchParams.title != null">
 				and title_ like #{searchParams.title}
 			</if>
+			<if test="searchParams.type != null">
+				and type_ = #{searchParams.type}
+			</if>
 		</where>
 		order by create_time desc
 	</select>

+ 9 - 0
web/src/main/java/com/jpsoft/employment/modules/base/controller/BudgetModifyRecordController.java

@@ -1,8 +1,10 @@
 package com.jpsoft.employment.modules.base.controller;
 
 import com.github.pagehelper.Page;
+import com.jpsoft.employment.modules.base.entity.FundExpensesInfo;
 import com.jpsoft.employment.modules.base.entity.FundIncomeInfo;
 import com.jpsoft.employment.modules.base.entity.TemplateOption;
+import com.jpsoft.employment.modules.base.service.FundExpensesInfoService;
 import com.jpsoft.employment.modules.base.service.FundIncomeInfoService;
 import com.jpsoft.employment.modules.base.service.TemplateOptionService;
 import com.jpsoft.employment.modules.common.dto.Sort;
@@ -37,6 +39,9 @@ public class BudgetModifyRecordController {
     @Autowired
     private FundIncomeInfoService fundIncomeInfoService;
 
+    @Autowired
+    private FundExpensesInfoService fundExpensesInfoService;
+
     @Autowired
     private UserService userService;
 
@@ -227,7 +232,11 @@ public class BudgetModifyRecordController {
             FundIncomeInfo fundIncomeInfo = fundIncomeInfoService.get(incomeId);
             if(fundIncomeInfo!=null){
                 searchParams.put("templateOptionId",fundIncomeInfo.getTemplateOptionId());
+            }
 
+            FundExpensesInfo fundExpensesInfo = fundExpensesInfoService.get(incomeId);
+            if(fundExpensesInfo!=null){
+                searchParams.put("templateOptionId",fundExpensesInfo.getTemplateOptionId());
             }
         }
 

+ 251 - 0
web/src/main/java/com/jpsoft/employment/modules/base/controller/ExpensesModifyRecordController.java

@@ -0,0 +1,251 @@
+package com.jpsoft.employment.modules.base.controller;
+
+import com.github.pagehelper.Page;
+import com.jpsoft.employment.modules.common.dto.Sort;
+import com.jpsoft.employment.modules.common.dto.MessageResult;
+import com.jpsoft.employment.modules.base.entity.ExpensesModifyRecord;
+import com.jpsoft.employment.modules.base.service.ExpensesModifyRecordService;
+import com.jpsoft.employment.modules.common.utils.PojoUtils;
+import com.jpsoft.employment.modules.sys.entity.User;
+import com.jpsoft.employment.modules.sys.service.UserService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@RestController
+@RequestMapping("/base/expensesModifyRecord")
+public class ExpensesModifyRecordController {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private ExpensesModifyRecordService expensesModifyRecordService;
+
+    @Autowired
+    private UserService userService;
+	
+	
+	@ApiOperation(value="创建空记录")
+    @GetMapping("create")
+    public MessageResult<ExpensesModifyRecord> create(){
+        MessageResult<ExpensesModifyRecord> msgResult = new MessageResult<>();
+
+        ExpensesModifyRecord expensesModifyRecord = new ExpensesModifyRecord();
+
+        msgResult.setData(expensesModifyRecord);
+        msgResult.setResult(true);
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="添加信息")
+    @PostMapping("add")
+    public MessageResult<ExpensesModifyRecord> add(@RequestBody ExpensesModifyRecord expensesModifyRecord,@RequestAttribute String subject){
+        MessageResult<ExpensesModifyRecord> msgResult = new MessageResult<>();
+
+        try {
+            expensesModifyRecord.setId(UUID.randomUUID().toString());
+			expensesModifyRecord.setDelFlag(false);
+            expensesModifyRecord.setCreateBy(subject);
+            expensesModifyRecord.setCreateTime(new Date());
+
+            int affectCount = expensesModifyRecordService.insert(expensesModifyRecord);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(expensesModifyRecord);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库添加失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="获取信息")
+    @GetMapping("edit/{id}")
+    public MessageResult<ExpensesModifyRecord> edit(@PathVariable("id") String id){
+        MessageResult<ExpensesModifyRecord> msgResult = new MessageResult<>();
+
+        try {
+            ExpensesModifyRecord expensesModifyRecord = expensesModifyRecordService.get(id);
+
+            if (expensesModifyRecord != null) {
+                msgResult.setResult(true);
+                msgResult.setData(expensesModifyRecord);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库不存在该记录!");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="更新用户")
+    @PostMapping("update")
+    public MessageResult<ExpensesModifyRecord> update(@RequestBody ExpensesModifyRecord expensesModifyRecord,@RequestAttribute String subject){
+        MessageResult<ExpensesModifyRecord> msgResult = new MessageResult<>();
+
+        try {
+		    expensesModifyRecord.setUpdateBy(subject);
+            expensesModifyRecord.setUpdateTime(new Date());
+		
+            int affectCount = expensesModifyRecordService.updateAndExpensesAmount(expensesModifyRecord);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(expensesModifyRecord);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库更新失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="删除用户")
+    @PostMapping("delete/{id}")
+    public MessageResult<ExpensesModifyRecord> delete(@PathVariable("id") String id,@RequestAttribute String subject){
+        MessageResult<ExpensesModifyRecord> msgResult = new MessageResult<>();
+
+        try {
+			
+			ExpensesModifyRecord expensesModifyRecord = expensesModifyRecordService.get(id);
+            expensesModifyRecord.setDelFlag(true);
+            expensesModifyRecord.setUpdateBy(subject);
+            expensesModifyRecord.setUpdateTime(new Date());
+			
+			int affectCount = expensesModifyRecordService.update(expensesModifyRecord);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库删除失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+
+    @ApiOperation(value="批量删除")
+    @PostMapping("batchDelete")
+    public MessageResult<Integer> batchDelete(@RequestBody List<String> idList,@RequestAttribute String subject){
+        MessageResult<Integer> msgResult = new MessageResult<>();
+
+        try {
+            int affectCount = 0;
+
+            for (String id : idList) {
+                ExpensesModifyRecord expensesModifyRecord = expensesModifyRecordService.get(id);
+                expensesModifyRecord.setDelFlag(true);
+                expensesModifyRecord.setUpdateBy(subject);
+                expensesModifyRecord.setUpdateTime(new Date());
+
+                affectCount += expensesModifyRecordService.update(expensesModifyRecord);
+            }
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(affectCount);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("删除失败");
+            }
+        }
+        catch(Exception ex){
+            logger.error(ex.getMessage(),ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="列表")
+    @RequestMapping(value = "pageList",method = RequestMethod.POST)
+    public MessageResult<Map> pageList(
+            String expensesId,
+            @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
+            @RequestParam(value="pageSize",defaultValue="20") int pageSize,
+            HttpServletRequest request){
+        String subject = (String)request.getAttribute("subject");
+
+        //当前用户ID
+        System.out.println(subject);
+
+        MessageResult<Map> msgResult = new MessageResult<>();
+
+        Map<String,Object> searchParams = new HashMap<>();
+
+        List<Sort> sortList = new ArrayList<>();
+        sortList.add(new Sort("create_time","desc"));
+
+        if (StringUtils.isNotEmpty(expensesId)) {
+            searchParams.put("expensesId",expensesId);
+        }
+
+
+        Page<ExpensesModifyRecord> page = expensesModifyRecordService.pageSearch(searchParams,pageIndex,pageSize,true,sortList);
+
+        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        for (ExpensesModifyRecord expensesModifyRecord:page) {
+            User user = userService.get(expensesModifyRecord.getCreateBy());
+            if(user!=null){
+                expensesModifyRecord.setCreateName(user.getRealName());
+            }
+
+            String createTimeStr = sdf.format(expensesModifyRecord.getCreateTime());
+
+            BigDecimal curAccumulate = expensesModifyRecordService.findCurLastAmount(createTimeStr,expensesId);
+
+            expensesModifyRecord.setCurAccumulate(curAccumulate);
+        }
+
+
+        msgResult.setResult(true);
+        msgResult.setData(PojoUtils.pageWrapper(page));
+
+        return msgResult;
+    }
+
+
+
+}

+ 1120 - 0
web/src/main/java/com/jpsoft/employment/modules/base/controller/FundExpensesInfoController.java

@@ -0,0 +1,1120 @@
+package com.jpsoft.employment.modules.base.controller;
+
+import com.github.pagehelper.Page;
+import com.jpsoft.employment.config.OSSConfig;
+import com.jpsoft.employment.modules.base.dto.AddRowDTO;
+import com.jpsoft.employment.modules.base.entity.*;
+import com.jpsoft.employment.modules.base.service.DepartmentInfoService;
+import com.jpsoft.employment.modules.base.service.TemplateInfoService;
+import com.jpsoft.employment.modules.base.service.TemplateOptionService;
+import com.jpsoft.employment.modules.common.dto.Sort;
+import com.jpsoft.employment.modules.common.dto.MessageResult;
+import com.jpsoft.employment.modules.base.service.FundExpensesInfoService;
+import com.jpsoft.employment.modules.common.utils.OSSUtil;
+import com.jpsoft.employment.modules.common.utils.PojoUtils;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@RestController
+@RequestMapping("/base/fundExpensesInfo")
+public class FundExpensesInfoController {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private FundExpensesInfoService fundExpensesInfoService;
+
+    @Autowired
+    private DepartmentInfoService departmentInfoService;
+
+    @Autowired
+    private TemplateInfoService templateInfoService;
+
+    @Autowired
+    private TemplateOptionService templateOptionService;
+
+    @Autowired
+    private OSSConfig ossConfig;
+
+
+    @ApiOperation(value = "创建空记录")
+    @GetMapping("create")
+    public MessageResult<FundExpensesInfo> create() {
+        MessageResult<FundExpensesInfo> msgResult = new MessageResult<>();
+
+        FundExpensesInfo fundExpensesInfo = new FundExpensesInfo();
+
+        msgResult.setData(fundExpensesInfo);
+        msgResult.setResult(true);
+
+        return msgResult;
+    }
+
+    @ApiOperation(value = "添加信息")
+    @PostMapping("add")
+    public MessageResult<FundExpensesInfo> add(@RequestBody FundExpensesInfo fundExpensesInfo, @RequestAttribute String subject) {
+        MessageResult<FundExpensesInfo> msgResult = new MessageResult<>();
+
+        try {
+            Date now = new Date();
+            fundExpensesInfo.setId(UUID.randomUUID().toString());
+            fundExpensesInfo.setDelFlag(false);
+            fundExpensesInfo.setCreateBy(subject);
+            fundExpensesInfo.setCreateTime(now);
+
+            if (StringUtils.isNotEmpty(fundExpensesInfo.getEndDateStr())) {
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                fundExpensesInfo.setEndDate(sdf.parse(fundExpensesInfo.getEndDateStr()));
+            }
+
+            fundExpensesInfo.setYear(now);
+
+            int affectCount = fundExpensesInfoService.insert(fundExpensesInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(fundExpensesInfo);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库添加失败");
+            }
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value = "获取信息")
+    @GetMapping("edit/{id}")
+    public MessageResult<FundExpensesInfo> edit(@PathVariable("id") String id) {
+        MessageResult<FundExpensesInfo> msgResult = new MessageResult<>();
+
+        try {
+            FundExpensesInfo fundExpensesInfo = fundExpensesInfoService.get(id);
+
+            if (fundExpensesInfo != null) {
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                if (fundExpensesInfo.getEndDate() != null) {
+                    fundExpensesInfo.setEndDateStr(sdf.format(fundExpensesInfo.getEndDate()));
+                }
+                if (StringUtils.isNotEmpty(fundExpensesInfo.getExpensesType())) {
+                    String type = fundExpensesInfo.getExpensesType();
+                    switch (type) {
+                        case "1":
+                            fundExpensesInfo.setExpensesTypeN("按月");
+                        case "2":
+                            fundExpensesInfo.setExpensesTypeN("按年");
+                        case "3":
+                            fundExpensesInfo.setExpensesTypeN("按季");
+                        case "4":
+                            fundExpensesInfo.setExpensesTypeN("按学期");
+                    }
+                }
+                msgResult.setResult(true);
+                msgResult.setData(fundExpensesInfo);
+
+
+                msgResult.setResult(true);
+                msgResult.setData(fundExpensesInfo);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库不存在该记录!");
+            }
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value = "更新用户")
+    @PostMapping("update")
+    public MessageResult<FundExpensesInfo> update(@RequestBody FundExpensesInfo fundExpensesInfo, @RequestAttribute String subject) {
+        MessageResult<FundExpensesInfo> msgResult = new MessageResult<>();
+
+        try {
+            fundExpensesInfo.setUpdateBy(subject);
+            fundExpensesInfo.setUpdateTime(new Date());
+
+
+            if (StringUtils.isNotEmpty(fundExpensesInfo.getEndDateStr())) {
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                fundExpensesInfo.setEndDate(sdf.parse(fundExpensesInfo.getEndDateStr()));
+            }
+
+            FundExpensesInfo orgItem = fundExpensesInfoService.get(fundExpensesInfo.getId());
+
+            if (orgItem.getCurMonthReceived() != null && fundExpensesInfo.getCurMonthReceived() != null) {
+                BigDecimal accumulateAmount = orgItem.getCurMonthReceived().add(fundExpensesInfo.getCurMonthReceived());
+                fundExpensesInfo.setCurMonthReceived(accumulateAmount);
+            }
+
+            int affectCount = fundExpensesInfoService.update(fundExpensesInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(fundExpensesInfo);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库更新失败");
+            }
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+
+    @ApiOperation(value = "批量保存")
+    @PostMapping("batchSave")
+    public MessageResult<FundExpensesInfo> batchSave(@RequestBody List<FundExpensesInfo> list, @RequestAttribute String subject) {
+        MessageResult<FundExpensesInfo> msgResult = new MessageResult<>();
+
+        try {
+            int affectCount = 0;
+
+            for (FundExpensesInfo fundExpensesInfo : list) {
+                fundExpensesInfo.setUpdateBy(subject);
+                fundExpensesInfo.setUpdateTime(new Date());
+
+                if (StringUtils.isNotEmpty(fundExpensesInfo.getEndDateStr())) {
+                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                    fundExpensesInfo.setEndDate(sdf.parse(fundExpensesInfo.getEndDateStr()));
+                }
+
+                affectCount += fundExpensesInfoService.update(fundExpensesInfo);
+            }
+
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库更新失败");
+            }
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value = "删除用户")
+    @PostMapping("delete/{id}")
+    public MessageResult<FundExpensesInfo> delete(@PathVariable("id") String id, @RequestAttribute String subject) {
+        MessageResult<FundExpensesInfo> msgResult = new MessageResult<>();
+
+        try {
+
+            FundExpensesInfo fundExpensesInfo = fundExpensesInfoService.get(id);
+            fundExpensesInfo.setDelFlag(true);
+            fundExpensesInfo.setUpdateBy(subject);
+            fundExpensesInfo.setUpdateTime(new Date());
+
+            int affectCount = fundExpensesInfoService.update(fundExpensesInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("数据库删除失败");
+            }
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+
+    @ApiOperation(value = "批量删除")
+    @PostMapping("batchDelete")
+    public MessageResult<Integer> batchDelete(@RequestBody List<String> idList, @RequestAttribute String subject) {
+        MessageResult<Integer> msgResult = new MessageResult<>();
+
+        try {
+            int affectCount = 0;
+
+            for (String id : idList) {
+                FundExpensesInfo fundExpensesInfo = fundExpensesInfoService.get(id);
+                fundExpensesInfo.setDelFlag(true);
+                fundExpensesInfo.setUpdateBy(subject);
+                fundExpensesInfo.setUpdateTime(new Date());
+
+                affectCount += fundExpensesInfoService.update(fundExpensesInfo);
+            }
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(affectCount);
+            } else {
+                msgResult.setResult(false);
+                msgResult.setMessage("删除失败");
+            }
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+        }
+
+        return msgResult;
+    }
+
+    @ApiOperation(value = "列表")
+    @RequestMapping(value = "pageList", method = RequestMethod.POST)
+    public MessageResult<Object> pageList(
+            String yearMonth, String name, String templateId,
+            @RequestParam(value = "pageIndex", defaultValue = "1") int pageIndex,
+            @RequestParam(value = "pageSize", defaultValue = "20000") int pageSize,
+            @RequestParam(value = "exportFlag", defaultValue = "false") Boolean exportFlag,
+            HttpServletRequest request) {
+        String subject = (String) request.getAttribute("subject");
+
+        //当前用户ID
+        System.out.println(subject);
+
+        MessageResult<Object> msgResult = new MessageResult<>();
+
+        try {
+
+            Map<String, Object> searchParams = new HashMap<>();
+
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("index_", "asc"));
+
+            String curMonth = "";
+            String startDate = "";
+            String endDate = "";
+            if (StringUtils.isNotEmpty(yearMonth)) {
+                startDate = yearMonth + "-01";
+                endDate = yearMonth + "-31";
+
+                searchParams.put("startDate", startDate);
+                searchParams.put("endDate", endDate);
+
+                curMonth = endDate;
+            }
+
+            if (StringUtils.isNotEmpty(name)) {
+                searchParams.put("name", "%" + name + "%");
+            }
+
+            if (StringUtils.isNotEmpty(templateId)) {
+                searchParams.put("templateId", templateId);
+            }
+
+
+            Page<FundExpensesInfo> page = fundExpensesInfoService.pageSearch(searchParams, pageIndex, pageSize, true, sortList);
+
+            SimpleDateFormat sdf3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+            SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM");
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+
+            List<Map> mapList = new ArrayList<>();
+
+            for (FundExpensesInfo fundExpensesInfo : page) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("id", fundExpensesInfo.getId());
+                map.put("name", fundExpensesInfo.getName());
+                map.put("serialNumber", fundExpensesInfo.getSerialNumber());
+                map.put("chargePerson", fundExpensesInfo.getChargePerson());
+                map.put("isSum", fundExpensesInfo.getIsSum());
+                BigDecimal budgetRevenue = fundExpensesInfo.getBudgetExpenses();
+                BigDecimal curBudgetRevenue = fundExpensesInfo.getCurBudgetExpenses();
+                if (fundExpensesInfo.getIsSum() != null) {
+                    if (fundExpensesInfo.getIsSum()) {
+                        String serialNumber = fundExpensesInfo.getSerialNumber();
+                        Map<String, BigDecimal> sumMap = fundExpensesInfoService.sumBudgetRevenue(serialNumber + ".%", startDate, endDate, templateId);
+
+                        if (sumMap != null) {
+                            budgetRevenue = sumMap.get("sumBudget");
+                            curBudgetRevenue = sumMap.get("sumCurBudgetExpenses");
+                        }
+                    }
+                }
+
+                map.put("budgetRevenue", budgetRevenue);
+                if (curBudgetRevenue == null || curBudgetRevenue.compareTo(BigDecimal.ZERO) == 0) {
+                    curBudgetRevenue = budgetRevenue;
+                }
+                map.put("curBudgetRevenue", curBudgetRevenue);
+                map.put("accountName", fundExpensesInfo.getAccountName());
+                map.put("curMonthReceived", fundExpensesInfo.getCurMonthReceived());
+                //map.put("actualTotalRevenue", fundIncomeInfo.getActualTotalRevenue());
+                //map.put("accumulatedArrears", fundIncomeInfo.getAccumulatedArrears());
+
+                String endDateStr = "";
+                String incomeTypeN = "";
+                String yearMonthStr = "";
+                String updateTime = "";
+                String createTime = "";
+                String year = "";
+
+                if (fundExpensesInfo.getYear() != null) {
+                    year = sdf.format(fundExpensesInfo.getYear());
+                }
+
+                if (fundExpensesInfo.getCreateTime() != null) {
+                    createTime = sdf3.format(fundExpensesInfo.getCreateTime());
+                }
+
+                if (fundExpensesInfo.getUpdateTime() != null) {
+                    updateTime = sdf3.format(fundExpensesInfo.getUpdateTime());
+                }
+
+                if (fundExpensesInfo.getEndDate() != null) {
+                    fundExpensesInfo.setEndDateStr(sdf.format(fundExpensesInfo.getEndDate()));
+                    endDateStr = sdf.format(fundExpensesInfo.getEndDate());
+                }
+
+                if (fundExpensesInfo.getEndDate() != null) {
+                    fundExpensesInfo.setEndDateStr(sdf.format(fundExpensesInfo.getEndDate()));
+                    endDateStr = sdf.format(fundExpensesInfo.getEndDate());
+                }
+                if (StringUtils.isNotEmpty(fundExpensesInfo.getExpensesType())) {
+                    String type = fundExpensesInfo.getExpensesType();
+                    switch (type) {
+                        case "1":
+                            fundExpensesInfo.setExpensesTypeN("按月");
+                            incomeTypeN = "按月";
+                            break;
+                        case "2":
+                            fundExpensesInfo.setExpensesTypeN("按年");
+                            incomeTypeN = "按年";
+                            break;
+                        case "3":
+                            fundExpensesInfo.setExpensesTypeN("按季");
+                            incomeTypeN = "按季";
+                            break;
+                        case "4":
+                            fundExpensesInfo.setExpensesTypeN("按学期");
+                            incomeTypeN = "按学期";
+                            break;
+                    }
+                }
+
+                map.put("endDateStr", endDateStr);
+                map.put("endDate", endDateStr);
+                map.put("incomeTypeN", incomeTypeN);
+
+                if (fundExpensesInfo.getYear() != null) {
+                    yearMonthStr = sdf2.format(fundExpensesInfo.getYear());
+                }
+
+                map.put("yearMonthStr", yearMonthStr);
+                map.put("yearMonth", yearMonthStr);
+
+                map.put("createTime", createTime);
+                map.put("updateTime", updateTime);
+                map.put("incomeTimeRange", fundExpensesInfo.getExpensesTimeRange());
+
+                map.put("attachment", fundExpensesInfo.getAttachment());
+
+                String incomeDepartment = "";
+                if (StringUtils.isNotEmpty(fundExpensesInfo.getExpensesDepartment())) {
+                    String[] incomeDepartmentArr = fundExpensesInfo.getExpensesDepartment().split(",");
+                    for (String departId : incomeDepartmentArr) {
+                        DepartmentInfo departmentInfo = departmentInfoService.get(departId);
+                        if (departmentInfo != null) {
+                            incomeDepartment += departmentInfo.getName() + ",";
+                        }
+                    }
+                    if (StringUtils.isNotEmpty(incomeDepartment)) {
+                        incomeDepartment = incomeDepartment.substring(0, incomeDepartment.lastIndexOf(","));
+                    }
+                }
+
+                map.put("departmentStr", incomeDepartment);
+                map.put("accountingName", fundExpensesInfo.getAccountingName());
+                map.put("bak", fundExpensesInfo.getBak());
+                map.put("year", year);
+
+                BigDecimal total = fundExpensesInfoService.sumBySerialNumber(fundExpensesInfo.getSerialNumber(), curMonth, templateId);
+
+                map.put("total", total);
+
+                BigDecimal accumulatedArrears = fundExpensesInfo.getCurBudgetExpenses();
+                if (total != null && accumulatedArrears != null) {
+                    accumulatedArrears = accumulatedArrears.subtract(total);
+                }
+
+                //累计欠费
+                map.put("accumulatedArrears", accumulatedArrears);
+
+                //实际总收入
+                map.put("actualTotalRevenue", total);
+
+                mapList.add(map);
+            }
+
+            if (exportFlag) {
+                String filePath = exportXls(mapList);
+                msgResult.setData(filePath);
+            } else {
+                Map<String, Object> dataMap = PojoUtils.pageWrapper(page);
+                dataMap.put("data", mapList);
+                msgResult.setData(dataMap);
+            }
+
+            msgResult.setResult(true);
+
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+            msgResult.setResult(false);
+        }
+
+        return msgResult;
+    }
+
+
+    //导出
+    private String exportXls(List<Map> mapList) {
+        String downloadUrl = "";
+
+        Workbook workbook = new HSSFWorkbook();
+        Sheet sheet = workbook.createSheet();
+
+        //表头
+        Row rowTitle = sheet.createRow(0);
+
+        String[] titles = new String[]{"序号", "项目名称", "预算支出", "账户名称", "本月支出资金", "实际总支出", "累计欠费",
+                "支出时间区间", "支出类型", "终止日", "支出实现部门", "会计主体名称", "备注", "所属年月"};
+
+        for (int i = 0; i < titles.length; i++) {
+            Cell cell = rowTitle.createCell(i);
+            cell.setCellValue(titles[i]);
+        }
+
+        for (int i = 0; i < mapList.size(); i++) {
+            Map<String, Object> map = mapList.get(i);
+
+            Row row = sheet.createRow(i + 1);
+
+            int colIndex = 0;
+            //row.createCell(colIndex++).setCellValue(i + 1);
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("serialNumber"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("name"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("budgetRevenue"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("accountName"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("curMonthReceived"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("actualTotalRevenue"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("accumulatedArrears"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("incomeTimeRange"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("incomeTypeN"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("endDateStr"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("incomeDepartment"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("accountingName"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("bak"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("yearMonthStr"), ""));
+        }
+
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+        try {
+            workbook.write(output);
+
+            byte[] buffer = output.toByteArray();
+            ByteArrayInputStream input = new ByteArrayInputStream(buffer);
+
+            downloadUrl = OSSUtil.upload(ossConfig, "fundExpensesList", "预算支出列表.xls", input);
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+        }
+
+        return downloadUrl;
+    }
+
+
+    @ApiOperation(value = "各板块汇总表")
+    @RequestMapping(value = "summaryList", method = RequestMethod.POST)
+    public MessageResult<Object> summaryList(
+            String yearMonth, String name,
+            @RequestParam(value = "pageIndex", defaultValue = "1") int pageIndex,
+            @RequestParam(value = "pageSize", defaultValue = "20000") int pageSize,
+            @RequestParam(value = "exportFlag", defaultValue = "false") Boolean exportFlag,
+            HttpServletRequest request) {
+        String subject = (String) request.getAttribute("subject");
+
+        //当前用户ID
+        System.out.println(subject);
+
+        MessageResult<Object> msgResult = new MessageResult<>();
+
+        try {
+
+            Map<String, Object> searchParams = new HashMap<>();
+
+            List<Sort> sortList = new ArrayList<>();
+            sortList.add(new Sort("template_id", "asc"));
+            sortList.add(new Sort("index_", "asc"));
+
+
+            String curMonth = "";
+            String startDate = "";
+            String endDate = "";
+            String startYearDate = "";
+            if (StringUtils.isNotEmpty(yearMonth)) {
+                startYearDate = yearMonth.substring(0, 4) + "-01-01";
+                startDate = yearMonth + "-01";
+                endDate = yearMonth + "-31";
+
+                searchParams.put("startDate", startDate);
+                searchParams.put("endDate", endDate);
+
+                curMonth = endDate;
+            }
+
+            if (StringUtils.isNotEmpty(name)) {
+                searchParams.put("title", "%" + name + "%");
+            }
+
+            searchParams.put("type", "2");
+
+            List<Map> mapList = new ArrayList<>();
+
+            BigDecimal curBudgetExpensesTotal = BigDecimal.ZERO;
+            BigDecimal accumulatedArrearsTotal = BigDecimal.ZERO;
+            BigDecimal actualTotalExpensesTotal = BigDecimal.ZERO;
+            BigDecimal curMonthReceivedTotal = BigDecimal.ZERO;
+            BigDecimal overIncomeTotal = BigDecimal.ZERO;
+
+
+            List<TemplateInfo> templateInfoList1 = templateInfoService.list(searchParams, sortList);
+
+            for (TemplateInfo templateInfo : templateInfoList1) {
+                Map<String, Object> map = new HashMap<>();
+                map.put("id", templateInfo.getId());
+                map.put("name", templateInfo.getTitle() + "(汇总)");
+                map.put("isSum", true);
+
+                Map<String, BigDecimal> sumMap = fundExpensesInfoService.sumBudgetRevenue(null, startDate, endDate, templateInfo.getId());
+
+                //BigDecimal curMonthReceived = fundExpensesInfoService.sumByTemplateOptionId(item.getId(), startDate, endDate);
+
+                FundExpensesInfo fundExpensesInfo = fundExpensesInfoService.findOneByTemplateOptionId(templateInfo.getId(), startDate, endDate);
+
+                //责任人
+                String chargePerson = "";
+                if (fundExpensesInfo != null) {
+                    chargePerson = fundExpensesInfo.getChargePerson();
+                }
+                map.put("chargePerson", chargePerson);
+
+                //本月支出
+                BigDecimal sumCurMonthReceived = BigDecimal.ZERO;
+                if (sumMap.get("sumCurMonthReceived") != null) {
+                    sumCurMonthReceived = new BigDecimal(sumMap.get("sumCurMonthReceived").toString());
+                }
+                map.put("curMonthReceived", sumCurMonthReceived);
+
+                curMonthReceivedTotal = curMonthReceivedTotal.add(sumCurMonthReceived);
+
+                //预算支出
+                BigDecimal sumCurBudgetExpenses = BigDecimal.ZERO;
+                if (sumMap.get("sumCurBudgetExpenses") != null) {
+                    sumCurBudgetExpenses = new BigDecimal(sumMap.get("sumCurBudgetExpenses").toString());
+                }
+                map.put("curBudgetExpenses", sumCurBudgetExpenses);
+
+                curBudgetExpensesTotal = curBudgetExpensesTotal.add(sumCurBudgetExpenses);
+
+
+                BigDecimal actualTotalExpenses = fundExpensesInfoService.sumBySerialNumber(null, curMonth, templateInfo.getId());
+
+                //实际总支出
+                map.put("actualTotalExpenses", actualTotalExpenses);
+
+                actualTotalExpensesTotal = actualTotalExpensesTotal.add(actualTotalExpenses);
+
+                BigDecimal accumulatedArrears = BigDecimal.ZERO;
+
+                if (sumCurBudgetExpenses != null) {
+                    if (actualTotalExpenses != null) {
+                        accumulatedArrears = sumCurBudgetExpenses.subtract(actualTotalExpenses);
+                    } else {
+                        accumulatedArrears = sumCurBudgetExpenses;
+                    }
+
+                    if (accumulatedArrears.compareTo(BigDecimal.ZERO) < 0) {
+                        map.put("overIncome", accumulatedArrears.abs());
+                        accumulatedArrears = BigDecimal.ZERO;
+                    }
+                }
+
+                //累计欠费
+                map.put("accumulatedArrears", accumulatedArrears);
+
+                accumulatedArrearsTotal = accumulatedArrearsTotal.add(accumulatedArrears);
+
+
+                BigDecimal percentage = BigDecimal.ZERO;
+                if (sumCurBudgetExpenses != null) {
+                    if (sumCurBudgetExpenses.compareTo(BigDecimal.ZERO) != 0) {
+                        percentage = actualTotalExpenses.divide(sumCurBudgetExpenses, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
+                    }
+                }
+
+                //完成比例
+                if (percentage.compareTo(new BigDecimal(100)) == 1) {
+                    percentage = new BigDecimal(100);
+                }
+                map.put("percentage", percentage);
+
+
+                List<TemplateOption> childrenItemList = templateOptionService.findByTemplateIdAndLen(templateInfo.getId(), 1);
+
+                boolean hasChildren = true;
+                if (childrenItemList.size() == 0) {
+                    hasChildren = false;
+                }
+
+                map.put("hasChildren", hasChildren);
+
+                mapList.add(map);
+            }
+
+
+            //汇总
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", "-1");
+            map.put("name", "总计");
+            map.put("curBudgetExpenses", curBudgetExpensesTotal);
+            map.put("accumulatedArrears", accumulatedArrearsTotal);
+            map.put("actualTotalExpenses", actualTotalExpensesTotal);
+            map.put("curMonthReceived", curMonthReceivedTotal);
+            if (overIncomeTotal.compareTo(BigDecimal.ZERO) > 0) {
+                map.put("overIncome", overIncomeTotal);
+            }
+
+            BigDecimal percentage = BigDecimal.ZERO;
+
+            if (curBudgetExpensesTotal != null && actualTotalExpensesTotal != null) {
+                if (curBudgetExpensesTotal.compareTo(BigDecimal.ZERO) != 0) {
+                    percentage = actualTotalExpensesTotal.divide(curBudgetExpensesTotal, 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
+                }
+            }
+
+            map.put("percentage", percentage);
+
+            mapList.add(map);
+
+            if (exportFlag) {
+                for (Map mapItem : mapList) {
+                    String templateId = mapItem.get("id").toString();
+
+                    List<Map> childrenMap = getAllChildMapData(templateId,null,yearMonth);
+
+                    mapItem.put("children", childrenMap);
+                }
+
+                String filePath = summaryListExportXls(mapList);
+                msgResult.setData(filePath);
+            } else {
+                Map<String, Object> dataMap = new HashMap<>();
+                dataMap.put("data", mapList);
+                msgResult.setData(dataMap);
+            }
+
+            msgResult.setResult(true);
+
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+            msgResult.setResult(false);
+        }
+
+        return msgResult;
+    }
+
+
+    @ApiOperation(value = "各板块汇总表子项目")
+    @RequestMapping(value = "childTemplateOption", method = RequestMethod.POST)
+    public MessageResult<Object> childTemplateOption(String id, String serialNum, String yearMonth) {
+
+        MessageResult<Object> msgResult = new MessageResult<>();
+
+        List<Map> mapList = getChildMapData(id, serialNum, yearMonth);
+
+        msgResult.setData(mapList);
+        msgResult.setResult(true);
+
+        return msgResult;
+    }
+
+
+    private List<Map> getChildMapData(String id, String serialNum, String yearMonth) {
+
+        List<Map> mapList = new ArrayList<>();
+
+        String curMonth = "";
+        String startDate = "";
+        String endDate = "";
+        String startYearDate = "";
+        if (StringUtils.isNotEmpty(yearMonth)) {
+            startYearDate = yearMonth.substring(0, 4) + "-01-01";
+            startDate = yearMonth + "-01";
+            endDate = yearMonth + "-31";
+
+            curMonth = endDate;
+        }
+
+
+        int length = 1;
+        String templateId;
+        List<TemplateOption> templateOptionList;
+
+        if (StringUtils.isNotEmpty(serialNum)) {
+            length = serialNum.length() + 2;
+            TemplateOption templateOption = templateOptionService.get(id);
+            templateId = templateOption.getTemplateId();
+            templateOptionList = templateOptionService.findByTemplateIdAndNum(templateId, serialNum + "%", length);
+        } else {
+            templateId = id;
+            templateOptionList = templateOptionService.findByTemplateIdAndLen(templateId, length);
+        }
+
+
+        for (TemplateOption item : templateOptionList) {
+            Map<String, Object> map = new HashMap<>();
+
+            map.put("id", item.getId());
+            String name = item.getName();
+            if (item.getIsSum()) {
+                name += "(汇总)";
+            }
+            map.put("name", name);
+            map.put("isSum2", item.getIsSum());
+            map.put("serialNum", item.getSerialNum());
+
+            Map<String, BigDecimal> sumMap = fundExpensesInfoService.sumBudgetRevenue(item.getSerialNum() + "%", startDate, endDate, item.getTemplateId());
+
+            //BigDecimal curMonthReceived = fundExpensesInfoService.sumByTemplateOptionId(item.getId(), startDate, endDate);
+
+            FundExpensesInfo fundExpensesInfo = fundExpensesInfoService.findOneByTemplateOptionId(item.getId(), startDate, endDate);
+
+            //责任人
+            String chargePerson = "";
+            if (fundExpensesInfo != null) {
+                chargePerson = fundExpensesInfo.getChargePerson();
+            }
+            map.put("chargePerson", chargePerson);
+
+            //本月支出
+            BigDecimal sumCurMonthReceived = BigDecimal.ZERO;
+            if (sumMap.get("sumCurMonthReceived") != null) {
+                sumCurMonthReceived = new BigDecimal(sumMap.get("sumCurMonthReceived").toString());
+            }
+            map.put("curMonthReceived", sumCurMonthReceived);
+
+            //预算支出
+            BigDecimal sumCurBudgetExpenses = BigDecimal.ZERO;
+            if (sumMap.get("sumCurBudgetExpenses") != null) {
+                sumCurBudgetExpenses = new BigDecimal(sumMap.get("sumCurBudgetExpenses").toString());
+            }
+            map.put("curBudgetExpenses", sumCurBudgetExpenses);
+
+            BigDecimal actualTotalExpenses = fundExpensesInfoService.sumBySerialNumber(item.getSerialNum() + "%", curMonth, item.getTemplateId());
+
+            //实际总支出
+            map.put("actualTotalExpenses", actualTotalExpenses);
+
+            BigDecimal accumulatedArrears = BigDecimal.ZERO;
+
+            if (sumCurBudgetExpenses != null) {
+                if (actualTotalExpenses != null) {
+                    accumulatedArrears = sumCurBudgetExpenses.subtract(actualTotalExpenses);
+                } else {
+                    accumulatedArrears = sumCurBudgetExpenses;
+                }
+
+                if (accumulatedArrears.compareTo(BigDecimal.ZERO) < 0) {
+                    map.put("overIncome", accumulatedArrears.abs());
+                    accumulatedArrears = BigDecimal.ZERO;
+                }
+            }
+
+            //累计欠费
+            map.put("accumulatedArrears", accumulatedArrears);
+
+
+            BigDecimal percentage = BigDecimal.ZERO;
+            if (sumCurBudgetExpenses != null) {
+                if (sumCurBudgetExpenses.compareTo(BigDecimal.ZERO) != 0) {
+                    percentage = actualTotalExpenses.divide(sumCurBudgetExpenses, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
+                }
+            }
+
+            //完成比例
+            if (percentage.compareTo(new BigDecimal(100)) == 1) {
+                percentage = new BigDecimal(100);
+            }
+            map.put("percentage", percentage);
+
+
+            List<TemplateOption> childrenItemList = templateOptionService.findByTemplateIdAndLen(id, length + 2);
+
+            boolean hasChildren = true;
+            if (childrenItemList.size() == 0) {
+                hasChildren = false;
+            }
+
+            map.put("hasChildren", hasChildren);
+
+            mapList.add(map);
+        }
+
+        return mapList;
+    }
+
+
+
+    private List<Map> getAllChildMapData(String id, String serialNum, String yearMonth) {
+
+        List<Map> mapList = new ArrayList<>();
+
+        String curMonth = "";
+        String startDate = "";
+        String endDate = "";
+        String startYearDate = "";
+        if (StringUtils.isNotEmpty(yearMonth)) {
+            startYearDate = yearMonth.substring(0, 4) + "-01-01";
+            startDate = yearMonth + "-01";
+            endDate = yearMonth + "-31";
+
+            curMonth = endDate;
+        }
+
+
+        int length = 1;
+        String templateId;
+        List<TemplateOption> templateOptionList;
+
+        if (StringUtils.isNotEmpty(serialNum)) {
+            length = serialNum.length() + 2;
+            TemplateOption templateOption = templateOptionService.get(id);
+            templateId = templateOption.getTemplateId();
+            templateOptionList = templateOptionService.findByTemplateIdAndNum(templateId, serialNum + "%", length);
+        } else {
+            templateId = id;
+            templateOptionList = templateOptionService.findByTemplateIdAndLen(templateId, length);
+        }
+
+
+        for (TemplateOption item : templateOptionList) {
+            Map<String, Object> map = new HashMap<>();
+
+            map.put("id", item.getId());
+            String name = item.getName();
+            if (item.getIsSum()) {
+                name += "(汇总)";
+            }
+            map.put("name", name);
+            map.put("isSum2", item.getIsSum());
+            map.put("serialNum", item.getSerialNum());
+
+            Map<String, BigDecimal> sumMap = fundExpensesInfoService.sumBudgetRevenue(item.getSerialNum() + "%", startDate, endDate, item.getTemplateId());
+
+            //BigDecimal curMonthReceived = fundExpensesInfoService.sumByTemplateOptionId(item.getId(), startDate, endDate);
+
+            FundExpensesInfo fundExpensesInfo = fundExpensesInfoService.findOneByTemplateOptionId(item.getId(), startDate, endDate);
+
+            //责任人
+            String chargePerson = "";
+            if (fundExpensesInfo != null) {
+                chargePerson = fundExpensesInfo.getChargePerson();
+            }
+            map.put("chargePerson", chargePerson);
+
+            //本月支出
+            BigDecimal sumCurMonthReceived = BigDecimal.ZERO;
+            if (sumMap.get("sumCurMonthReceived") != null) {
+                sumCurMonthReceived = new BigDecimal(sumMap.get("sumCurMonthReceived").toString());
+            }
+            map.put("curMonthReceived", sumCurMonthReceived);
+
+            //预算支出
+            BigDecimal sumCurBudgetExpenses = BigDecimal.ZERO;
+            if (sumMap.get("sumCurBudgetExpenses") != null) {
+                sumCurBudgetExpenses = new BigDecimal(sumMap.get("sumCurBudgetExpenses").toString());
+            }
+            map.put("curBudgetExpenses", sumCurBudgetExpenses);
+
+            BigDecimal actualTotalExpenses = fundExpensesInfoService.sumBySerialNumber(item.getSerialNum() + "%", curMonth, item.getTemplateId());
+
+            //实际总支出
+            map.put("actualTotalExpenses", actualTotalExpenses);
+
+            BigDecimal accumulatedArrears = BigDecimal.ZERO;
+
+            if (sumCurBudgetExpenses != null) {
+                if (actualTotalExpenses != null) {
+                    accumulatedArrears = sumCurBudgetExpenses.subtract(actualTotalExpenses);
+                } else {
+                    accumulatedArrears = sumCurBudgetExpenses;
+                }
+
+                if (accumulatedArrears.compareTo(BigDecimal.ZERO) < 0) {
+                    map.put("overIncome", accumulatedArrears.abs());
+                    accumulatedArrears = BigDecimal.ZERO;
+                }
+            }
+
+            //累计欠费
+            map.put("accumulatedArrears", accumulatedArrears);
+
+
+            BigDecimal percentage = BigDecimal.ZERO;
+            if (sumCurBudgetExpenses != null) {
+                if (sumCurBudgetExpenses.compareTo(BigDecimal.ZERO) != 0) {
+                    percentage = actualTotalExpenses.divide(sumCurBudgetExpenses, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100));
+                }
+            }
+
+            //完成比例
+            if (percentage.compareTo(new BigDecimal(100)) == 1) {
+                percentage = new BigDecimal(100);
+            }
+            map.put("percentage", percentage);
+
+
+            List<TemplateOption> childrenItemList = templateOptionService.findByTemplateIdAndLen(id, length + 2);
+
+            boolean hasChildren = true;
+            if (childrenItemList.size() == 0) {
+                hasChildren = false;
+            }
+
+            map.put("hasChildren", hasChildren);
+
+            if(hasChildren){
+                List<Map> childrenMap = getAllChildMapData(item.getId(),item.getSerialNum(),yearMonth);
+                map.put("children", childrenMap);
+            }
+
+            mapList.add(map);
+        }
+
+        return mapList;
+    }
+
+
+    //导出
+    private String summaryListExportXls(List<Map> mapList) {
+        String downloadUrl = "";
+
+        Workbook workbook = new HSSFWorkbook();
+        Sheet sheet = workbook.createSheet();
+
+        //表头
+        Row rowTitle = sheet.createRow(0);
+
+        String[] titles = new String[]{"排序号", "序号", "支出子项目", "预算支出", "本月支出金额", "实际总支出", "累计欠费", "目前支出完全比率",
+                "累计已支出金额", "实际支出结余", "备注"};
+
+        for (int i = 0; i < titles.length; i++) {
+            Cell cell = rowTitle.createCell(i);
+            cell.setCellValue(titles[i]);
+        }
+
+        AddRowDTO addRow = new AddRowDTO();
+        addRow.setRows(1);
+
+        for (int i = 0; i < mapList.size(); i++) {
+            Map<String, Object> map = mapList.get(i);
+
+            Row row = sheet.createRow(addRow.getRows());
+
+            int colIndex = 0;
+            row.createCell(colIndex++).setCellValue(addRow.getRows());
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("serialNum"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("name"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("curBudgetExpenses"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("curMonthReceived"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("actualTotalExpenses"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("accumulatedArrears"), ""));
+            row.createCell(colIndex++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map.get("percentage"), ""));
+
+            addRow.setRows(addRow.getRows() + 1);
+
+            if (map.get("children") != null) {
+                writeDataToExcel(sheet, map, addRow);
+            }
+        }
+
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+        try {
+            workbook.write(output);
+
+            byte[] buffer = output.toByteArray();
+            ByteArrayInputStream input = new ByteArrayInputStream(buffer);
+
+            downloadUrl = OSSUtil.upload(ossConfig, "summaryList", "各板块汇总表.xls", input);
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+        }
+
+        return downloadUrl;
+    }
+
+
+    private void writeDataToExcel(Sheet sheet, Map map, AddRowDTO addRow) {
+        List<Map> mapList = (List<Map>) map.get("children");
+
+        for (int k = 0; k < mapList.size(); k++) {
+            Map<String, Object> map2 = mapList.get(k);
+            Row rowChild = sheet.createRow(addRow.getRows());
+
+            int colIndexChild = 0;
+
+            rowChild.createCell(colIndexChild++).setCellValue(addRow.getRows());
+            rowChild.createCell(colIndexChild++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map2.get("serialNum"), ""));
+            rowChild.createCell(colIndexChild++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map2.get("name"), ""));
+            rowChild.createCell(colIndexChild++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map2.get("curBudgetExpenses"), ""));
+            rowChild.createCell(colIndexChild++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map2.get("curMonthReceived"), ""));
+            rowChild.createCell(colIndexChild++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map2.get("actualTotalExpenses"), ""));
+            rowChild.createCell(colIndexChild++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map2.get("accumulatedArrears"), ""));
+            rowChild.createCell(colIndexChild++).setCellValue(com.jpsoft.employment.modules.common.utils.StringUtils.strValue(map2.get("percentage"), ""));
+
+            addRow.setRows(addRow.getRows() + 1);
+
+            if (map2.get("children") != null) {
+                writeDataToExcel(sheet, map2, addRow);
+            }
+        }
+
+    }
+
+}

+ 2 - 0
web/src/main/java/com/jpsoft/employment/modules/base/controller/FundIncomeInfoController.java

@@ -801,6 +801,8 @@ public class FundIncomeInfoController {
                 searchParams.put("title", "%" + name + "%");
             }
 
+            searchParams.put("type", "1");
+
             List<Map> mapList = new ArrayList<>();
 
             BigDecimal curBudgetRevenueTotal = BigDecimal.ZERO;

+ 7 - 3
web/src/main/java/com/jpsoft/employment/modules/base/controller/TemplateInfoController.java

@@ -319,16 +319,20 @@ public class TemplateInfoController {
 
     @ApiOperation(value = "列表")
     @RequestMapping(value = "list", method = RequestMethod.POST)
-    public MessageResult<List<TemplateInfo>> pageList(HttpServletRequest request) {
+    public MessageResult<List<TemplateInfo>> pageList(String type,HttpServletRequest request) {
         String subject = (String) request.getAttribute("subject");
 
-        Map<String, Object> searchParams = new HashMap<>();
-
         //当前用户ID
         System.out.println(subject);
 
         MessageResult<List<TemplateInfo>> msgResult = new MessageResult<>();
 
+        Map<String, Object> searchParams = new HashMap<>();
+
+        if (StringUtils.isNotEmpty(type)) {
+            searchParams.put("type", type);
+        }
+
         List<TemplateInfo> templateInfoList = templateInfoService.list(searchParams, null);
 
 

+ 2 - 2
web/src/main/resources/application.yml

@@ -133,8 +133,8 @@ applet:
 #  objectPre: smart
 
 oss:
-  accessKeyId: LTAIXIyrXmjgOXQa
-  accessKeySecret: B0RS3zHLct8OKKIDu2HREaVx6RXgWL
+  accessKeyId: LTAI5tE6rbN2oHo1v5dfm8NL
+  accessKeySecret: pYwijAneKvDVvC68Cyx33UgZHkdCH8
   endpoint: http://oss-cn-hangzhou.aliyuncs.com
   bucketName: rccs
 #  urlPrefix: http://rccs.oss-cn-hangzhou.aliyuncs.com