Browse Source

分类报表功能
1.贸易报表功能
2.无船承运报表功能
3.平顶报表功能

yanliming 1 year ago
parent
commit
c98ed71f61
18 changed files with 2066 additions and 0 deletions
  1. 18 0
      common/src/main/java/com/jpsoft/railroad/modules/base/dao/FlatRoofInfoDAO.java
  2. 18 0
      common/src/main/java/com/jpsoft/railroad/modules/base/dao/TradeReportDAO.java
  3. 19 0
      common/src/main/java/com/jpsoft/railroad/modules/base/dao/TransportInfoDAO.java
  4. 62 0
      common/src/main/java/com/jpsoft/railroad/modules/base/entity/FlatRoofInfo.java
  5. 82 0
      common/src/main/java/com/jpsoft/railroad/modules/base/entity/TradeReport.java
  6. 67 0
      common/src/main/java/com/jpsoft/railroad/modules/base/entity/TransportInfo.java
  7. 17 0
      common/src/main/java/com/jpsoft/railroad/modules/base/service/FlatRoofInfoService.java
  8. 17 0
      common/src/main/java/com/jpsoft/railroad/modules/base/service/TradeReportService.java
  9. 18 0
      common/src/main/java/com/jpsoft/railroad/modules/base/service/TransportInfoService.java
  10. 70 0
      common/src/main/java/com/jpsoft/railroad/modules/base/service/impl/FlatRoofInfoServiceImpl.java
  11. 70 0
      common/src/main/java/com/jpsoft/railroad/modules/base/service/impl/TradeReportServiceImpl.java
  12. 75 0
      common/src/main/java/com/jpsoft/railroad/modules/base/service/impl/TransportInfoServiceImpl.java
  13. 111 0
      common/src/main/resources/mapper/base/FlatRoofInfo.xml
  14. 146 0
      common/src/main/resources/mapper/base/TradeReport.xml
  15. 124 0
      common/src/main/resources/mapper/base/TransportInfo.xml
  16. 384 0
      web/src/main/java/com/jpsoft/railroad/modules/base/controller/FlatRoofInfoController.java
  17. 404 0
      web/src/main/java/com/jpsoft/railroad/modules/base/controller/TradeReportController.java
  18. 364 0
      web/src/main/java/com/jpsoft/railroad/modules/base/controller/TransportInfoController.java

+ 18 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/dao/FlatRoofInfoDAO.java

@@ -0,0 +1,18 @@
+package com.jpsoft.railroad.modules.base.dao;
+
+import java.util.List;
+import org.springframework.stereotype.Repository;
+import com.jpsoft.railroad.modules.base.entity.FlatRoofInfo;
+import java.util.Map;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+
+@Repository
+public interface FlatRoofInfoDAO {
+	int insert(FlatRoofInfo entity);
+	int update(FlatRoofInfo entity);
+	int exist(String id);
+	FlatRoofInfo get(String id);
+	int delete(String id);
+	List<FlatRoofInfo> list();
+	List<FlatRoofInfo> search(Map<String, Object> searchParams, List<Sort> sortList);
+}

+ 18 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/dao/TradeReportDAO.java

@@ -0,0 +1,18 @@
+package com.jpsoft.railroad.modules.base.dao;
+
+import java.util.List;
+import org.springframework.stereotype.Repository;
+import com.jpsoft.railroad.modules.base.entity.TradeReport;
+import java.util.Map;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+
+@Repository
+public interface TradeReportDAO {
+	int insert(TradeReport entity);
+	int update(TradeReport entity);
+	int exist(String id);
+	TradeReport get(String id);
+	int delete(String id);
+	List<TradeReport> list();
+	List<TradeReport> search(Map<String, Object> searchParams, List<Sort> sortList);
+}

+ 19 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/dao/TransportInfoDAO.java

@@ -0,0 +1,19 @@
+package com.jpsoft.railroad.modules.base.dao;
+
+import java.util.List;
+import org.springframework.stereotype.Repository;
+import com.jpsoft.railroad.modules.base.entity.TransportInfo;
+import java.util.Map;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+
+@Repository
+public interface TransportInfoDAO {
+	int insert(TransportInfo entity);
+	int update(TransportInfo entity);
+	int exist(String id);
+	TransportInfo get(String id);
+	int delete(String id);
+	List<TransportInfo> list();
+	TransportInfo findLastIndex();
+	List<TransportInfo> search(Map<String, Object> searchParams, List<Sort> sortList);
+}

+ 62 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/entity/FlatRoofInfo.java

@@ -0,0 +1,62 @@
+package com.jpsoft.railroad.modules.base.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.math.BigDecimal;
+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_flat_roof_info的实体类
+ */
+@Data
+@ApiModel(value = "base_flat_roof_info的实体类")
+public class FlatRoofInfo {
+		@ApiModelProperty(value = "ID")
+	private String id;
+
+	@ApiModelProperty(value = "日期")
+	@DateTimeFormat(pattern="yyyy-MM")
+	@JsonFormat(pattern = "yyyy-MM",timezone ="GMT+8")
+	private Date date;
+
+	
+				@ApiModelProperty(value = "车数")
+	private Integer vehiclesNum;
+	
+				@ApiModelProperty(value = "吨数")
+	private BigDecimal tonnage;
+	
+				@ApiModelProperty(value = "应收金额")
+	private BigDecimal accountsReceivable;
+	
+				@ApiModelProperty(value = "支付-人工")
+	private BigDecimal paymentLabor;
+	
+				@ApiModelProperty(value = "支付-龙门")
+	private BigDecimal paymentLongmen;
+	
+				@ApiModelProperty(value = "创建人")
+	private String createBy;
+	
+					@ApiModelProperty(value = "创建时间")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
+	private Date createTime;
+	
+			@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	
+					@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 Boolean delFlag;
+	
+		}

+ 82 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/entity/TradeReport.java

@@ -0,0 +1,82 @@
+package com.jpsoft.railroad.modules.base.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.math.BigDecimal;
+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_trade_report的实体类
+ */
+@Data
+@ApiModel(value = "base_trade_report的实体类")
+public class TradeReport {
+		@ApiModelProperty(value = "ID")
+	private String id;
+
+	@ApiModelProperty(value = "date")
+	@DateTimeFormat(pattern="yyyy-MM")
+	@JsonFormat(pattern = "yyyy-MM",timezone ="GMT+8")
+	private Date date;
+	
+				@ApiModelProperty(value = "上游贸易商")
+	private String upstreamTraders;
+	
+				@ApiModelProperty(value = "下游贸易商")
+	private String downstreamTraders;
+	
+				@ApiModelProperty(value = "品名")
+	private String productName;
+	
+				@ApiModelProperty(value = "吨位")
+	private BigDecimal tonnage;
+	
+				@ApiModelProperty(value = "应收")
+	private BigDecimal receivable;
+	
+				@ApiModelProperty(value = "实收")
+	private BigDecimal actualReceived;
+	
+				@ApiModelProperty(value = "未收")
+	private BigDecimal unpaid;
+	
+				@ApiModelProperty(value = "应付")
+	private BigDecimal accountsPayable;
+	
+				@ApiModelProperty(value = "实付")
+	private BigDecimal actualPayment;
+	
+				@ApiModelProperty(value = "未付")
+	private BigDecimal unpaidPayments;
+	
+				@ApiModelProperty(value = "利润")
+	private BigDecimal profit;
+	
+				@ApiModelProperty(value = "备注")
+	private String bak;
+	
+				@ApiModelProperty(value = "创建人")
+	private String createBy;
+	
+					@ApiModelProperty(value = "创建时间")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
+	private Date createTime;
+	
+			@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	
+					@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 Boolean delFlag;
+	
+		}

+ 67 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/entity/TransportInfo.java

@@ -0,0 +1,67 @@
+package com.jpsoft.railroad.modules.base.entity;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.text.SimpleDateFormat;
+import java.math.BigDecimal;
+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_transport_info的实体类
+ */
+@Data
+@ApiModel(value = "base_transport_info的实体类")
+public class TransportInfo {
+		@ApiModelProperty(value = "ID")
+	private String id;
+	
+				@ApiModelProperty(value = "序号")
+	private Integer index;
+	
+					@ApiModelProperty(value = "时间")
+	@DateTimeFormat(pattern="yyyy-MM")
+	@JsonFormat(pattern = "yyyy-MM",timezone ="GMT+8")
+	private Date month;
+	
+			@ApiModelProperty(value = "品名")
+	private String productName;
+	
+				@ApiModelProperty(value = "吨数")
+	private BigDecimal tonnage;
+	
+				@ApiModelProperty(value = "支出")
+	private BigDecimal expenditure;
+	
+				@ApiModelProperty(value = "收入")
+	private BigDecimal income;
+	
+				@ApiModelProperty(value = "利润")
+	private BigDecimal profit;
+	
+				@ApiModelProperty(value = "备注")
+	private String bak;
+	
+				@ApiModelProperty(value = "创建人")
+	private String createBy;
+	
+					@ApiModelProperty(value = "创建时间")
+	@DateTimeFormat(pattern="yyyy-MM-dd HH:mm")
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm",timezone ="GMT+8")
+	private Date createTime;
+	
+			@ApiModelProperty(value = "更新人")
+	private String updateBy;
+	
+					@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 Boolean delFlag;
+	
+		}

+ 17 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/service/FlatRoofInfoService.java

@@ -0,0 +1,17 @@
+package com.jpsoft.railroad.modules.base.service;
+
+import java.util.List;
+import java.util.Map;
+import com.jpsoft.railroad.modules.base.entity.FlatRoofInfo;
+import com.github.pagehelper.Page;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+
+public interface FlatRoofInfoService {
+	FlatRoofInfo get(String id);
+	boolean exist(String id);
+	int insert(FlatRoofInfo model);
+	int update(FlatRoofInfo model);
+	int delete(String id);
+	List<FlatRoofInfo> list();
+	Page<FlatRoofInfo> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);
+}

+ 17 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/service/TradeReportService.java

@@ -0,0 +1,17 @@
+package com.jpsoft.railroad.modules.base.service;
+
+import java.util.List;
+import java.util.Map;
+import com.jpsoft.railroad.modules.base.entity.TradeReport;
+import com.github.pagehelper.Page;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+
+public interface TradeReportService {
+	TradeReport get(String id);
+	boolean exist(String id);
+	int insert(TradeReport model);
+	int update(TradeReport model);
+	int delete(String id);
+	List<TradeReport> list();
+	Page<TradeReport> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);
+}

+ 18 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/service/TransportInfoService.java

@@ -0,0 +1,18 @@
+package com.jpsoft.railroad.modules.base.service;
+
+import java.util.List;
+import java.util.Map;
+import com.jpsoft.railroad.modules.base.entity.TransportInfo;
+import com.github.pagehelper.Page;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+
+public interface TransportInfoService {
+	TransportInfo get(String id);
+	boolean exist(String id);
+	int insert(TransportInfo model);
+	int update(TransportInfo model);
+	int delete(String id);
+	List<TransportInfo> list();
+	TransportInfo findLastIndex();
+	Page<TransportInfo> pageSearch(Map<String, Object> searchParams, int pageNum, int pageSize, boolean count, List<Sort> sortList);
+}

+ 70 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/service/impl/FlatRoofInfoServiceImpl.java

@@ -0,0 +1,70 @@
+package com.jpsoft.railroad.modules.base.service.impl;
+
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import com.jpsoft.railroad.modules.base.dao.FlatRoofInfoDAO;
+import com.jpsoft.railroad.modules.base.entity.FlatRoofInfo;
+import com.jpsoft.railroad.modules.base.service.FlatRoofInfoService;
+import com.github.pagehelper.Page;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+import com.github.pagehelper.PageHelper;
+
+@Transactional
+@Component(value="flatRoofInfoService")
+public class FlatRoofInfoServiceImpl implements FlatRoofInfoService {
+	@Resource(name="flatRoofInfoDAO")
+	private FlatRoofInfoDAO flatRoofInfoDAO;
+
+	@Override
+	public FlatRoofInfo get(String id) {
+		// TODO Auto-generated method stub
+		return flatRoofInfoDAO.get(id);
+	}
+
+	@Override
+	public int insert(FlatRoofInfo model) {
+		// TODO Auto-generated method stub
+		//model.setId(UUID.randomUUID().toString());
+		
+		return flatRoofInfoDAO.insert(model);
+	}
+
+	@Override
+	public int update(FlatRoofInfo model) {
+		// TODO Auto-generated method stub
+		return flatRoofInfoDAO.update(model);		
+	}
+
+	@Override
+	public int delete(String id) {
+		// TODO Auto-generated method stub
+		return flatRoofInfoDAO.delete(id);
+	}
+
+	@Override
+	public boolean exist(String id) {
+		// TODO Auto-generated method stub
+		int count = flatRoofInfoDAO.exist(id);
+		
+		return count > 0 ? true : false;
+	}
+	
+	@Override
+	public List<FlatRoofInfo> list() {
+		// TODO Auto-generated method stub
+		return flatRoofInfoDAO.list();
+	}
+		
+	@Override
+	public Page<FlatRoofInfo> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize,boolean count,List<Sort> sortList) {
+        Page<FlatRoofInfo> page = PageHelper.startPage(pageNumber,pageSize,count).doSelectPage(()->{
+            flatRoofInfoDAO.search(searchParams,sortList);
+        });
+        
+        return page;
+	}
+}

+ 70 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/service/impl/TradeReportServiceImpl.java

@@ -0,0 +1,70 @@
+package com.jpsoft.railroad.modules.base.service.impl;
+
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import com.jpsoft.railroad.modules.base.dao.TradeReportDAO;
+import com.jpsoft.railroad.modules.base.entity.TradeReport;
+import com.jpsoft.railroad.modules.base.service.TradeReportService;
+import com.github.pagehelper.Page;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+import com.github.pagehelper.PageHelper;
+
+@Transactional
+@Component(value="tradeReportService")
+public class TradeReportServiceImpl implements TradeReportService {
+	@Resource(name="tradeReportDAO")
+	private TradeReportDAO tradeReportDAO;
+
+	@Override
+	public TradeReport get(String id) {
+		// TODO Auto-generated method stub
+		return tradeReportDAO.get(id);
+	}
+
+	@Override
+	public int insert(TradeReport model) {
+		// TODO Auto-generated method stub
+		//model.setId(UUID.randomUUID().toString());
+		
+		return tradeReportDAO.insert(model);
+	}
+
+	@Override
+	public int update(TradeReport model) {
+		// TODO Auto-generated method stub
+		return tradeReportDAO.update(model);		
+	}
+
+	@Override
+	public int delete(String id) {
+		// TODO Auto-generated method stub
+		return tradeReportDAO.delete(id);
+	}
+
+	@Override
+	public boolean exist(String id) {
+		// TODO Auto-generated method stub
+		int count = tradeReportDAO.exist(id);
+		
+		return count > 0 ? true : false;
+	}
+	
+	@Override
+	public List<TradeReport> list() {
+		// TODO Auto-generated method stub
+		return tradeReportDAO.list();
+	}
+		
+	@Override
+	public Page<TradeReport> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize,boolean count,List<Sort> sortList) {
+        Page<TradeReport> page = PageHelper.startPage(pageNumber,pageSize,count).doSelectPage(()->{
+            tradeReportDAO.search(searchParams,sortList);
+        });
+        
+        return page;
+	}
+}

+ 75 - 0
common/src/main/java/com/jpsoft/railroad/modules/base/service/impl/TransportInfoServiceImpl.java

@@ -0,0 +1,75 @@
+package com.jpsoft.railroad.modules.base.service.impl;
+
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import javax.annotation.Resource;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.annotation.Transactional;
+import com.jpsoft.railroad.modules.base.dao.TransportInfoDAO;
+import com.jpsoft.railroad.modules.base.entity.TransportInfo;
+import com.jpsoft.railroad.modules.base.service.TransportInfoService;
+import com.github.pagehelper.Page;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+import com.github.pagehelper.PageHelper;
+
+@Transactional
+@Component(value="transportInfoService")
+public class TransportInfoServiceImpl implements TransportInfoService {
+	@Resource(name="transportInfoDAO")
+	private TransportInfoDAO transportInfoDAO;
+
+	@Override
+	public TransportInfo get(String id) {
+		// TODO Auto-generated method stub
+		return transportInfoDAO.get(id);
+	}
+
+	@Override
+	public int insert(TransportInfo model) {
+		// TODO Auto-generated method stub
+		//model.setId(UUID.randomUUID().toString());
+		
+		return transportInfoDAO.insert(model);
+	}
+
+	@Override
+	public int update(TransportInfo model) {
+		// TODO Auto-generated method stub
+		return transportInfoDAO.update(model);		
+	}
+
+	@Override
+	public int delete(String id) {
+		// TODO Auto-generated method stub
+		return transportInfoDAO.delete(id);
+	}
+
+	@Override
+	public boolean exist(String id) {
+		// TODO Auto-generated method stub
+		int count = transportInfoDAO.exist(id);
+		
+		return count > 0 ? true : false;
+	}
+	
+	@Override
+	public List<TransportInfo> list() {
+		// TODO Auto-generated method stub
+		return transportInfoDAO.list();
+	}
+
+	@Override
+	public TransportInfo findLastIndex(){
+		return transportInfoDAO.findLastIndex();
+	}
+		
+	@Override
+	public Page<TransportInfo> pageSearch(Map<String, Object> searchParams, int pageNumber, int pageSize,boolean count,List<Sort> sortList) {
+        Page<TransportInfo> page = PageHelper.startPage(pageNumber,pageSize,count).doSelectPage(()->{
+            transportInfoDAO.search(searchParams,sortList);
+        });
+        
+        return page;
+	}
+}

+ 111 - 0
common/src/main/resources/mapper/base/FlatRoofInfo.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.railroad.modules.base.dao.FlatRoofInfoDAO">
+	<resultMap id="FlatRoofInfoMap" type="com.jpsoft.railroad.modules.base.entity.FlatRoofInfo">
+		<id property="id" column="id_" />
+			<result property="date" column="date_" />
+			<result property="vehiclesNum" column="vehicles_num" />
+			<result property="tonnage" column="tonnage_" />
+			<result property="accountsReceivable" column="accounts_receivable" />
+			<result property="paymentLabor" column="payment_labor" />
+			<result property="paymentLongmen" column="payment_longmen" />
+			<result property="createBy" column="create_by" />
+			<result property="createTime" column="create_time" />
+			<result property="updateBy" column="update_by" />
+			<result property="updateTime" column="update_time" />
+			<result property="delFlag" column="del_flag" />
+			</resultMap>
+	<insert id="insert" parameterType="com.jpsoft.railroad.modules.base.entity.FlatRoofInfo">
+	<!--
+	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+		select sys_guid() from dual
+	</selectKey>
+	-->
+	<![CDATA[
+		insert into base_flat_roof_info
+	    (id_,date_,vehicles_num,tonnage_,accounts_receivable,payment_labor,payment_longmen,create_by,create_time,update_by,update_time,del_flag)
+		values
+		(
+#{id,jdbcType=VARCHAR}
+,#{date,jdbcType= TIMESTAMP }
+,#{vehiclesNum,jdbcType= NUMERIC }
+,#{tonnage,jdbcType= NUMERIC }
+,#{accountsReceivable,jdbcType= NUMERIC }
+,#{paymentLabor,jdbcType= NUMERIC }
+,#{paymentLongmen,jdbcType= NUMERIC }
+,#{createBy,jdbcType=VARCHAR}
+,#{createTime,jdbcType= TIMESTAMP }
+,#{updateBy,jdbcType=VARCHAR}
+,#{updateTime,jdbcType= TIMESTAMP }
+,#{delFlag,jdbcType= NUMERIC }
+		)
+	]]>
+	</insert>
+	<delete id="delete" parameterType="string">
+		delete from base_flat_roof_info where id_=#{id,jdbcType=VARCHAR}
+	</delete>
+	<update id="update" parameterType="com.jpsoft.railroad.modules.base.entity.FlatRoofInfo">
+		update base_flat_roof_info
+		<set>
+			<if test="date!=null">
+				date_=#{date,jdbcType= TIMESTAMP },
+			</if>
+				<if test="vehiclesNum!=null">
+		vehicles_num=#{vehiclesNum,jdbcType= NUMERIC },
+		</if>
+				<if test="tonnage!=null">
+		tonnage_=#{tonnage,jdbcType= NUMERIC },
+		</if>
+				<if test="accountsReceivable!=null">
+		accounts_receivable=#{accountsReceivable,jdbcType= NUMERIC },
+		</if>
+				<if test="paymentLabor!=null">
+		payment_labor=#{paymentLabor,jdbcType= NUMERIC },
+		</if>
+				<if test="paymentLongmen!=null">
+		payment_longmen=#{paymentLongmen,jdbcType= NUMERIC },
+		</if>
+				<if test="createBy!=null">
+		create_by=#{createBy,jdbcType=VARCHAR},
+		</if>
+				<if test="createTime!=null">
+		create_time=#{createTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="updateBy!=null">
+		update_by=#{updateBy,jdbcType=VARCHAR},
+		</if>
+				<if test="updateTime!=null">
+		update_time=#{updateTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="delFlag!=null">
+		del_flag=#{delFlag,jdbcType= NUMERIC },
+		</if>
+		</set>
+	where id_=#{id}
+	</update>
+	<select id="get" parameterType="string" resultMap="FlatRoofInfoMap">
+		select * from base_flat_roof_info where id_=#{0}
+	</select>
+	<select id="exist" parameterType="string" resultType="int">
+		select count(*) from base_flat_roof_info where id_=#{0}
+	</select>
+	<select id="list" resultMap="FlatRoofInfoMap">
+		select * from base_flat_roof_info
+	</select>
+	<select id="search" parameterType="hashmap" resultMap="FlatRoofInfoMap">
+		<![CDATA[
+			select * from base_flat_roof_info
+		]]>
+		<where>
+			del_flag = false
+			<if test="searchParams.id != null">
+				and ID_ like #{searchParams.id}
+			</if>
+		</where>
+		<foreach item="sort" collection="sortList"  open="order by" separator=",">
+	        ${sort.name} ${sort.order}
+	 	</foreach>
+	</select>
+</mapper>

+ 146 - 0
common/src/main/resources/mapper/base/TradeReport.xml

@@ -0,0 +1,146 @@
+<?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.railroad.modules.base.dao.TradeReportDAO">
+	<resultMap id="TradeReportMap" type="com.jpsoft.railroad.modules.base.entity.TradeReport">
+		<id property="id" column="id_" />
+			<result property="date" column="date_" />
+			<result property="upstreamTraders" column="upstream_traders" />
+			<result property="downstreamTraders" column="downstream_traders" />
+			<result property="productName" column="product_name" />
+			<result property="tonnage" column="tonnage_" />
+			<result property="receivable" column="receivable_" />
+			<result property="actualReceived" column="actual_received" />
+			<result property="unpaid" column="unpaid_" />
+			<result property="accountsPayable" column="accounts_payable" />
+			<result property="actualPayment" column="actual_payment" />
+			<result property="unpaidPayments" column="unpaid_payments" />
+			<result property="profit" column="profit_" />
+			<result property="bak" column="bak_" />
+			<result property="createBy" column="create_by" />
+			<result property="createTime" column="create_time" />
+			<result property="updateBy" column="update_by" />
+			<result property="updateTime" column="update_time" />
+			<result property="delFlag" column="del_flag" />
+			</resultMap>
+	<insert id="insert" parameterType="com.jpsoft.railroad.modules.base.entity.TradeReport">
+	<!--
+	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+		select sys_guid() from dual
+	</selectKey>
+	-->
+	<![CDATA[
+		insert into base_trade_report
+	    (id_,date_,upstream_traders,downstream_traders,product_name,tonnage_,receivable_,actual_received,unpaid_,accounts_payable,actual_payment,unpaid_payments,profit_,bak_,create_by,create_time,update_by,update_time,del_flag)
+		values
+		(
+#{id,jdbcType=VARCHAR}
+,#{date,jdbcType= TIMESTAMP }
+,#{upstreamTraders,jdbcType=VARCHAR}
+,#{downstreamTraders,jdbcType=VARCHAR}
+,#{productName,jdbcType=VARCHAR}
+,#{tonnage,jdbcType= NUMERIC }
+,#{receivable,jdbcType= NUMERIC }
+,#{actualReceived,jdbcType= NUMERIC }
+,#{unpaid,jdbcType= NUMERIC }
+,#{accountsPayable,jdbcType= NUMERIC }
+,#{actualPayment,jdbcType= NUMERIC }
+,#{unpaidPayments,jdbcType= NUMERIC }
+,#{profit,jdbcType= NUMERIC }
+,#{bak,jdbcType=VARCHAR}
+,#{createBy,jdbcType=VARCHAR}
+,#{createTime,jdbcType= TIMESTAMP }
+,#{updateBy,jdbcType=VARCHAR}
+,#{updateTime,jdbcType= TIMESTAMP }
+,#{delFlag,jdbcType= NUMERIC }
+		)
+	]]>
+	</insert>
+	<delete id="delete" parameterType="string">
+		delete from base_trade_report where id_=#{id,jdbcType=VARCHAR}
+	</delete>
+	<update id="update" parameterType="com.jpsoft.railroad.modules.base.entity.TradeReport">
+		update base_trade_report
+		<set>
+			<if test="date!=null">
+				date_=#{date,jdbcType= TIMESTAMP },
+			</if>
+				<if test="upstreamTraders!=null">
+		upstream_traders=#{upstreamTraders,jdbcType=VARCHAR},
+		</if>
+				<if test="downstreamTraders!=null">
+		downstream_traders=#{downstreamTraders,jdbcType=VARCHAR},
+		</if>
+				<if test="productName!=null">
+		product_name=#{productName,jdbcType=VARCHAR},
+		</if>
+				<if test="tonnage!=null">
+		tonnage_=#{tonnage,jdbcType= NUMERIC },
+		</if>
+				<if test="receivable!=null">
+		receivable_=#{receivable,jdbcType= NUMERIC },
+		</if>
+				<if test="actualReceived!=null">
+		actual_received=#{actualReceived,jdbcType= NUMERIC },
+		</if>
+				<if test="unpaid!=null">
+		unpaid_=#{unpaid,jdbcType= NUMERIC },
+		</if>
+				<if test="accountsPayable!=null">
+		accounts_payable=#{accountsPayable,jdbcType= NUMERIC },
+		</if>
+				<if test="actualPayment!=null">
+		actual_payment=#{actualPayment,jdbcType= NUMERIC },
+		</if>
+				<if test="unpaidPayments!=null">
+		unpaid_payments=#{unpaidPayments,jdbcType= NUMERIC },
+		</if>
+				<if test="profit!=null">
+		profit_=#{profit,jdbcType= NUMERIC },
+		</if>
+				<if test="bak!=null">
+		bak_=#{bak,jdbcType=VARCHAR},
+		</if>
+				<if test="createBy!=null">
+		create_by=#{createBy,jdbcType=VARCHAR},
+		</if>
+				<if test="createTime!=null">
+		create_time=#{createTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="updateBy!=null">
+		update_by=#{updateBy,jdbcType=VARCHAR},
+		</if>
+				<if test="updateTime!=null">
+		update_time=#{updateTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="delFlag!=null">
+		del_flag=#{delFlag,jdbcType= NUMERIC },
+		</if>
+		</set>
+	where id_=#{id}
+	</update>
+	<select id="get" parameterType="string" resultMap="TradeReportMap">
+		select * from base_trade_report where id_=#{0}
+	</select>
+	<select id="exist" parameterType="string" resultType="int">
+		select count(*) from base_trade_report where id_=#{0}
+	</select>
+	<select id="list" resultMap="TradeReportMap">
+		select * from base_trade_report
+	</select>
+	<select id="search" parameterType="hashmap" resultMap="TradeReportMap">
+		<![CDATA[
+			select * from base_trade_report
+		]]>
+		<where>
+			del_flag=false
+			<if test="searchParams.id != null">
+				and ID_ like #{searchParams.id}
+			</if>
+		</where>
+		<foreach item="sort" collection="sortList"  open="order by" separator=",">
+	        ${sort.name} ${sort.order}
+	 	</foreach>
+	</select>
+</mapper>

+ 124 - 0
common/src/main/resources/mapper/base/TransportInfo.xml

@@ -0,0 +1,124 @@
+<?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.railroad.modules.base.dao.TransportInfoDAO">
+	<resultMap id="TransportInfoMap" type="com.jpsoft.railroad.modules.base.entity.TransportInfo">
+		<id property="id" column="id_" />
+			<result property="index" column="index_" />
+			<result property="month" column="month_" />
+			<result property="productName" column="product_name" />
+			<result property="tonnage" column="tonnage_" />
+			<result property="expenditure" column="expenditure_" />
+			<result property="income" column="income_" />
+			<result property="profit" column="profit_" />
+			<result property="bak" column="bak_" />
+			<result property="createBy" column="create_by" />
+			<result property="createTime" column="create_time" />
+			<result property="updateBy" column="update_by" />
+			<result property="updateTime" column="update_time" />
+			<result property="delFlag" column="del_flag" />
+			</resultMap>
+	<insert id="insert" parameterType="com.jpsoft.railroad.modules.base.entity.TransportInfo">
+	<!--
+	<selectKey resultType="java.lang.String" order="BEFORE" keyProperty="id">
+		select sys_guid() from dual
+	</selectKey>
+	-->
+	<![CDATA[
+		insert into base_transport_info
+	    (id_,index_,month_,product_name,tonnage_,expenditure_,income_,profit_,bak_,create_by,create_time,update_by,update_time,del_flag)
+		values
+		(
+#{id,jdbcType=VARCHAR}
+,#{index,jdbcType= NUMERIC }
+,#{month,jdbcType= TIMESTAMP }
+,#{productName,jdbcType=VARCHAR}
+,#{tonnage,jdbcType= NUMERIC }
+,#{expenditure,jdbcType= NUMERIC }
+,#{income,jdbcType= NUMERIC }
+,#{profit,jdbcType= NUMERIC }
+,#{bak,jdbcType=VARCHAR}
+,#{createBy,jdbcType=VARCHAR}
+,#{createTime,jdbcType= TIMESTAMP }
+,#{updateBy,jdbcType=VARCHAR}
+,#{updateTime,jdbcType= TIMESTAMP }
+,#{delFlag,jdbcType= NUMERIC }
+		)
+	]]>
+	</insert>
+	<delete id="delete" parameterType="string">
+		delete from base_transport_info where id_=#{id,jdbcType=VARCHAR}
+	</delete>
+	<update id="update" parameterType="com.jpsoft.railroad.modules.base.entity.TransportInfo">
+		update base_transport_info
+		<set>
+				<if test="index!=null">
+		index_=#{index,jdbcType= NUMERIC },
+		</if>
+				<if test="month!=null">
+		month_=#{month,jdbcType= TIMESTAMP },
+		</if>
+				<if test="productName!=null">
+		product_name=#{productName,jdbcType=VARCHAR},
+		</if>
+				<if test="tonnage!=null">
+		tonnage_=#{tonnage,jdbcType= NUMERIC },
+		</if>
+				<if test="expenditure!=null">
+		expenditure_=#{expenditure,jdbcType= NUMERIC },
+		</if>
+				<if test="income!=null">
+		income_=#{income,jdbcType= NUMERIC },
+		</if>
+				<if test="profit!=null">
+		profit_=#{profit,jdbcType= NUMERIC },
+		</if>
+				<if test="bak!=null">
+		bak_=#{bak,jdbcType=VARCHAR},
+		</if>
+				<if test="createBy!=null">
+		create_by=#{createBy,jdbcType=VARCHAR},
+		</if>
+				<if test="createTime!=null">
+		create_time=#{createTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="updateBy!=null">
+		update_by=#{updateBy,jdbcType=VARCHAR},
+		</if>
+				<if test="updateTime!=null">
+		update_time=#{updateTime,jdbcType= TIMESTAMP },
+		</if>
+				<if test="delFlag!=null">
+		del_flag=#{delFlag,jdbcType= NUMERIC },
+		</if>
+		</set>
+	where id_=#{id}
+	</update>
+	<select id="get" parameterType="string" resultMap="TransportInfoMap">
+		select * from base_transport_info where id_=#{0}
+	</select>
+	<select id="exist" parameterType="string" resultType="int">
+		select count(*) from base_transport_info where id_=#{0}
+	</select>
+	<select id="list" resultMap="TransportInfoMap">
+		select * from base_transport_info
+	</select>
+	<select id="findLastIndex" resultMap="TransportInfoMap">
+		select * from base_transport_info where del_flag=false order by index_ desc limit 1
+	</select>
+	<select id="search" parameterType="hashmap" resultMap="TransportInfoMap">
+		<![CDATA[
+			select * from base_transport_info
+		]]>
+		<where>
+			del_flag=false
+			<if test="searchParams.id != null">
+				and ID_ like #{searchParams.id}
+			</if>
+		</where>
+		<foreach item="sort" collection="sortList"  open="order by" separator=",">
+	        ${sort.name} ${sort.order}
+	 	</foreach>
+	</select>
+</mapper>

+ 384 - 0
web/src/main/java/com/jpsoft/railroad/modules/base/controller/FlatRoofInfoController.java

@@ -0,0 +1,384 @@
+package com.jpsoft.railroad.modules.base.controller;
+
+import com.github.pagehelper.Page;
+import com.jpsoft.railroad.config.OSSConfig;
+import com.jpsoft.railroad.modules.common.utils.OSSUtil;
+import com.jpsoft.railroad.modules.common.utils.PojoUtils;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+import com.jpsoft.railroad.modules.common.dto.MessageResult;
+import com.jpsoft.railroad.modules.base.entity.FlatRoofInfo;
+import com.jpsoft.railroad.modules.base.service.FlatRoofInfoService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+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/flatRoofInfo")
+public class FlatRoofInfoController {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private FlatRoofInfoService flatRoofInfoService;
+
+    @Autowired
+    private OSSConfig ossConfig;
+	
+	
+	@ApiOperation(value="创建空记录")
+    @GetMapping("create")
+    public MessageResult<FlatRoofInfo> create(){
+        MessageResult<FlatRoofInfo> msgResult = new MessageResult<>();
+
+        FlatRoofInfo flatRoofInfo = new FlatRoofInfo();
+
+        msgResult.setData(flatRoofInfo);
+        msgResult.setResult(true);
+
+        return msgResult;
+    }
+
+    @ApiOperation(value="添加信息")
+    @PostMapping("add")
+    public MessageResult<FlatRoofInfo> add(@RequestBody FlatRoofInfo flatRoofInfo,@RequestAttribute String subject){
+        MessageResult<FlatRoofInfo> msgResult = new MessageResult<>();
+
+        try {
+            flatRoofInfo.setId(UUID.randomUUID().toString());
+			flatRoofInfo.setDelFlag(false);
+            flatRoofInfo.setCreateBy(subject);
+            flatRoofInfo.setCreateTime(new Date());
+
+            int affectCount = flatRoofInfoService.insert(flatRoofInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(flatRoofInfo);
+            } 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<FlatRoofInfo> edit(@PathVariable("id") String id){
+        MessageResult<FlatRoofInfo> msgResult = new MessageResult<>();
+
+        try {
+            FlatRoofInfo flatRoofInfo = flatRoofInfoService.get(id);
+
+            if (flatRoofInfo != null) {
+                msgResult.setResult(true);
+                msgResult.setData(flatRoofInfo);
+            } 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<FlatRoofInfo> update(@RequestBody FlatRoofInfo flatRoofInfo,@RequestAttribute String subject){
+        MessageResult<FlatRoofInfo> msgResult = new MessageResult<>();
+
+        try {
+		    flatRoofInfo.setUpdateBy(subject);
+            flatRoofInfo.setUpdateTime(new Date());
+		
+            int affectCount = flatRoofInfoService.update(flatRoofInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(flatRoofInfo);
+            } 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<FlatRoofInfo> delete(@PathVariable("id") String id,@RequestAttribute String subject){
+        MessageResult<FlatRoofInfo> msgResult = new MessageResult<>();
+
+        try {
+			
+			FlatRoofInfo flatRoofInfo = flatRoofInfoService.get(id);
+            flatRoofInfo.setDelFlag(true);
+            flatRoofInfo.setUpdateBy(subject);
+            flatRoofInfo.setUpdateTime(new Date());
+			
+			int affectCount = flatRoofInfoService.update(flatRoofInfo);
+
+            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) {
+                FlatRoofInfo flatRoofInfo = flatRoofInfoService.get(id);
+                flatRoofInfo.setDelFlag(true);
+                flatRoofInfo.setUpdateBy(subject);
+                flatRoofInfo.setUpdateTime(new Date());
+
+                affectCount += flatRoofInfoService.update(flatRoofInfo);
+            }
+
+            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 id,
+            @RequestParam(value="pageIndex",defaultValue="1") int pageIndex,
+            @RequestParam(value="pageSize",defaultValue="20") 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("create_time", "desc"));
+
+            if (StringUtils.isNotEmpty(id)) {
+                searchParams.put("id", "%" + id + "%");
+            }
+
+
+            Page<FlatRoofInfo> page = flatRoofInfoService.pageSearch(searchParams, pageIndex, pageSize, true, sortList);
+
+
+            if (exportFlag) {
+                List<FlatRoofInfo> flatRoofInfoList = page.getResult();
+                Integer total1 = 0;
+                BigDecimal total2 = BigDecimal.ZERO;
+                BigDecimal total3 = BigDecimal.ZERO;
+                BigDecimal total4 = BigDecimal.ZERO;
+                BigDecimal total5 = BigDecimal.ZERO;
+                for (FlatRoofInfo item : flatRoofInfoList) {
+                    total1 += item.getVehiclesNum();
+                    total2 = total2.add(item.getTonnage());
+                    total3 = total3.add(item.getAccountsReceivable());
+                    total4 = total4.add(item.getPaymentLabor());
+                    total5 = total5.add(item.getPaymentLongmen());
+
+                }
+                FlatRoofInfo flatRoofInfo = new FlatRoofInfo();
+                flatRoofInfo.setVehiclesNum(total1);
+                flatRoofInfo.setTonnage(total2);
+                flatRoofInfo.setAccountsReceivable(total3);
+                flatRoofInfo.setPaymentLabor(total4);
+                flatRoofInfo.setPaymentLongmen(total5);
+
+                flatRoofInfoList.add(flatRoofInfo);
+
+                String filePath = exportXls(flatRoofInfoList);
+                msgResult.setData(filePath);
+                msgResult.setResult(true);
+            } else {
+                Map<String, Object> dataMap = PojoUtils.pageWrapper(page);
+
+                msgResult.setResult(true);
+                msgResult.setData(dataMap);
+            }
+        }
+        catch (Exception ex) {
+            ex.printStackTrace();
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+
+        }
+
+        return msgResult;
+    }
+
+
+    private String exportXls(List<FlatRoofInfo> flatRoofInfoList) {
+        String downloadUrl = "";
+
+        Workbook workbook = new HSSFWorkbook();
+        Sheet sheet = workbook.createSheet();
+
+        //表头
+        Row rowTitle1 = sheet.createRow(0);
+
+        Row rowTitle2 = sheet.createRow(1);
+
+        String[] titles1 = new String[]{"时间", "车数", "吨数", "应收金额", "人工", ""};
+
+        String[] titles2 = new String[]{ "", "", "", "","收入", "龙门"};
+
+        HSSFCellStyle cellStyle = ((HSSFWorkbook) workbook).createCellStyle();
+        cellStyle.setAlignment(HorizontalAlignment.CENTER);
+        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+
+        for (int i = 0; i < titles1.length; i++) {
+            Cell cell = rowTitle1.createCell(i);
+            cell.setCellValue(titles1[i]);
+            cell.setCellStyle(cellStyle);
+        }
+
+        for (int i = 0; i < titles2.length; i++) {
+            Cell cell = rowTitle2.createCell(i);
+            cell.setCellValue(titles2[i]);
+            cell.setCellStyle(cellStyle);
+        }
+
+        sheet.addMergedRegion(new CellRangeAddress(0, 0, 4, 5));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 1, 1));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 2, 2));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 3, 3));
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+
+        for (int i = 0; i < flatRoofInfoList.size(); i++) {
+            FlatRoofInfo flatRoofInfo = flatRoofInfoList.get(i);
+
+            Row row = sheet.createRow(i + 2);
+
+            int colIndex = 0;
+            String date = "";
+            if (flatRoofInfo.getDate() != null) {
+                date = sdf.format(flatRoofInfo.getDate());
+                row.createCell(colIndex++).setCellValue(date);
+            }
+            else{
+                row.createCell(colIndex++).setCellValue("合计");
+            }
+
+
+            Integer vehiclesNum=null;
+            if (flatRoofInfo.getVehiclesNum() != null) {
+                vehiclesNum = Integer.parseInt(flatRoofInfo.getVehiclesNum().toString());
+            }
+            row.createCell(colIndex++).setCellValue(vehiclesNum);
+
+            Double tonnage=null;
+            if (flatRoofInfo.getTonnage() != null) {
+                tonnage = Double.parseDouble(flatRoofInfo.getTonnage().toString());
+            }
+            row.createCell(colIndex++).setCellValue(tonnage);
+
+            Double accountsReceivable = null;
+            if (flatRoofInfo.getAccountsReceivable() != null) {
+                accountsReceivable = Double.parseDouble(flatRoofInfo.getAccountsReceivable().toString());
+            }
+            row.createCell(colIndex++).setCellValue(accountsReceivable);
+            Double paymentLabor = null;
+            if (flatRoofInfo.getPaymentLabor() != null) {
+                paymentLabor = Double.parseDouble(flatRoofInfo.getPaymentLabor().toString());
+            }
+            row.createCell(colIndex++).setCellValue(paymentLabor);
+            Double paymentLongmen = null;
+            if (flatRoofInfo.getPaymentLongmen() != null) {
+                paymentLongmen = Double.parseDouble(flatRoofInfo.getPaymentLongmen().toString());
+            }
+            row.createCell(colIndex++).setCellValue(paymentLongmen);
+
+        }
+
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+        try {
+            workbook.write(output);
+
+            byte[] buffer = output.toByteArray();
+            ByteArrayInputStream input = new ByteArrayInputStream(buffer);
+
+            downloadUrl = OSSUtil.upload(ossConfig, "tradeReport", "分类统计平顶表" + sdf.format(new Date()) + ".xls", input);
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+        }
+
+        return downloadUrl;
+    }
+}

+ 404 - 0
web/src/main/java/com/jpsoft/railroad/modules/base/controller/TradeReportController.java

@@ -0,0 +1,404 @@
+package com.jpsoft.railroad.modules.base.controller;
+
+import com.github.pagehelper.Page;
+import com.jpsoft.railroad.config.OSSConfig;
+import com.jpsoft.railroad.modules.common.utils.OSSUtil;
+import com.jpsoft.railroad.modules.common.utils.PojoUtils;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+import com.jpsoft.railroad.modules.common.dto.MessageResult;
+import com.jpsoft.railroad.modules.base.entity.TradeReport;
+import com.jpsoft.railroad.modules.base.service.TradeReportService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+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.io.IOException;
+import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+@RestController
+@RequestMapping("/base/tradeReport")
+public class TradeReportController {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private TradeReportService tradeReportService;
+
+    @Autowired
+    private OSSConfig ossConfig;
+
+
+    @ApiOperation(value = "创建空记录")
+    @GetMapping("create")
+    public MessageResult<TradeReport> create() {
+        MessageResult<TradeReport> msgResult = new MessageResult<>();
+
+        TradeReport tradeReport = new TradeReport();
+
+        msgResult.setData(tradeReport);
+        msgResult.setResult(true);
+
+        return msgResult;
+    }
+
+    @ApiOperation(value = "添加信息")
+    @PostMapping("add")
+    public MessageResult<TradeReport> add(@RequestBody TradeReport tradeReport, @RequestAttribute String subject) {
+        MessageResult<TradeReport> msgResult = new MessageResult<>();
+
+        try {
+            tradeReport.setId(UUID.randomUUID().toString());
+            tradeReport.setDelFlag(false);
+            tradeReport.setCreateBy(subject);
+            tradeReport.setCreateTime(new Date());
+
+            int affectCount = tradeReportService.insert(tradeReport);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(tradeReport);
+            } 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<TradeReport> edit(@PathVariable("id") String id) {
+        MessageResult<TradeReport> msgResult = new MessageResult<>();
+
+        try {
+            TradeReport tradeReport = tradeReportService.get(id);
+
+            if (tradeReport != null) {
+                msgResult.setResult(true);
+                msgResult.setData(tradeReport);
+            } 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<TradeReport> update(@RequestBody TradeReport tradeReport, @RequestAttribute String subject) {
+        MessageResult<TradeReport> msgResult = new MessageResult<>();
+
+        try {
+            tradeReport.setUpdateBy(subject);
+            tradeReport.setUpdateTime(new Date());
+
+            int affectCount = tradeReportService.update(tradeReport);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(tradeReport);
+            } 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<TradeReport> delete(@PathVariable("id") String id, @RequestAttribute String subject) {
+        MessageResult<TradeReport> msgResult = new MessageResult<>();
+
+        try {
+
+            TradeReport tradeReport = tradeReportService.get(id);
+            tradeReport.setDelFlag(true);
+            tradeReport.setUpdateBy(subject);
+            tradeReport.setUpdateTime(new Date());
+
+            int affectCount = tradeReportService.update(tradeReport);
+
+            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) {
+                TradeReport tradeReport = tradeReportService.get(id);
+                tradeReport.setDelFlag(true);
+                tradeReport.setUpdateBy(subject);
+                tradeReport.setUpdateTime(new Date());
+
+                affectCount += tradeReportService.update(tradeReport);
+            }
+
+            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 id,
+            @RequestParam(value = "pageIndex", defaultValue = "1") int pageIndex,
+            @RequestParam(value = "pageSize", defaultValue = "20") 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("date_", "asc"));
+
+            if (StringUtils.isNotEmpty(id)) {
+                searchParams.put("id", "%" + id + "%");
+            }
+
+
+            Page<TradeReport> page = tradeReportService.pageSearch(searchParams, pageIndex, pageSize, true, sortList);
+
+
+            if (exportFlag) {
+                List<TradeReport> tradeReportList = page.getResult();
+                BigDecimal total1 = BigDecimal.ZERO;
+                BigDecimal total2 = BigDecimal.ZERO;
+                BigDecimal total3 = BigDecimal.ZERO;
+                BigDecimal total4 = BigDecimal.ZERO;
+                BigDecimal total5 = BigDecimal.ZERO;
+                BigDecimal total6 = BigDecimal.ZERO;
+                BigDecimal total7 = BigDecimal.ZERO;
+                BigDecimal total8 = BigDecimal.ZERO;
+                for (TradeReport item : tradeReportList) {
+                    total1 = total1.add(item.getTonnage());
+                    total2 = total2.add(item.getReceivable());
+                    total3 = total3.add(item.getActualReceived());
+                    total4 = total4.add(item.getUnpaid());
+                    total5 = total5.add(item.getAccountsPayable());
+                    total6 = total6.add(item.getActualPayment());
+                    total7 = total7.add(item.getUnpaidPayments());
+                    total8 = total8.add(item.getProfit());
+                }
+                TradeReport tradeReport = new TradeReport();
+                tradeReport.setUpstreamTraders("合计");
+                tradeReport.setTonnage(total1);
+                tradeReport.setReceivable(total2);
+                tradeReport.setActualReceived(total3);
+                tradeReport.setUnpaid(total4);
+                tradeReport.setAccountsPayable(total5);
+                tradeReport.setActualPayment(total6);
+                tradeReport.setUnpaidPayments(total7);
+                tradeReport.setProfit(total8);
+
+                tradeReportList.add(tradeReport);
+
+                String filePath = exportXls(tradeReportList);
+                msgResult.setData(filePath);
+                msgResult.setResult(true);
+            } else {
+                Map<String, Object> dataMap = PojoUtils.pageWrapper(page);
+
+                msgResult.setResult(true);
+                msgResult.setData(dataMap);
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+
+        }
+
+        return msgResult;
+    }
+
+
+    private String exportXls(List<TradeReport> tradeReportList) {
+        String downloadUrl = "";
+
+        Workbook workbook = new HSSFWorkbook();
+        Sheet sheet = workbook.createSheet();
+
+        //表头
+        Row rowTitle1 = sheet.createRow(0);
+
+        Row rowTitle2 = sheet.createRow(1);
+
+        String[] titles1 = new String[]{"日期", "贸易商", "", "品名", "吨位", "贸易额(万元)", "", "", "", "", "", "利润", "备注"};
+
+        String[] titles2 = new String[]{"", "上游", "下游", "", "", "应收",
+                "实收", "未收", "应付", "实付", "未付"};
+
+        HSSFCellStyle cellStyle = ((HSSFWorkbook) workbook).createCellStyle();
+        cellStyle.setAlignment(HorizontalAlignment.CENTER);
+        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+
+        for (int i = 0; i < titles1.length; i++) {
+            Cell cell = rowTitle1.createCell(i);
+            cell.setCellValue(titles1[i]);
+            cell.setCellStyle(cellStyle);
+        }
+
+        for (int i = 0; i < titles2.length; i++) {
+            Cell cell = rowTitle2.createCell(i);
+            cell.setCellValue(titles2[i]);
+            cell.setCellStyle(cellStyle);
+        }
+
+        sheet.addMergedRegion(new CellRangeAddress(0, 0, 1, 2));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, 0));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 3, 3));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 4, 4));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 11, 11));
+        sheet.addMergedRegion(new CellRangeAddress(0, 1, 12, 12));
+        sheet.addMergedRegion(new CellRangeAddress(0, 0, 5, 10));
+
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+
+        for (int i = 0; i < tradeReportList.size(); i++) {
+            TradeReport tradeReport = tradeReportList.get(i);
+
+            Row row = sheet.createRow(i + 2);
+
+            int colIndex = 0;
+            String date = "";
+            if (tradeReport.getDate() != null) {
+                date = sdf.format(tradeReport.getDate());
+            }
+            row.createCell(colIndex++).setCellValue(date);
+            row.createCell(colIndex++).setCellValue(tradeReport.getUpstreamTraders());
+            row.createCell(colIndex++).setCellValue(tradeReport.getDownstreamTraders());
+            row.createCell(colIndex++).setCellValue(tradeReport.getProductName());
+            Double tonnage=null;
+            if (tradeReport.getTonnage() != null) {
+                tonnage = Double.parseDouble(tradeReport.getTonnage().toString());
+            }
+            row.createCell(colIndex++).setCellValue(tonnage);
+            Double receivable = null;
+            if (tradeReport.getReceivable() != null) {
+                receivable = Double.parseDouble(tradeReport.getReceivable().toString());
+            }
+            row.createCell(colIndex++).setCellValue(receivable);
+            Double actualReceived = null;
+            if (tradeReport.getActualReceived() != null) {
+                actualReceived = Double.parseDouble(tradeReport.getActualReceived().toString());
+            }
+            row.createCell(colIndex++).setCellValue(actualReceived);
+            Double unpaid = null;
+            if (tradeReport.getUnpaid() != null) {
+                unpaid = Double.parseDouble(tradeReport.getUnpaid().toString());
+            }
+            row.createCell(colIndex++).setCellValue(unpaid);
+            Double accountsPayable = null;
+            if (tradeReport.getAccountsPayable() != null) {
+                accountsPayable = Double.parseDouble(tradeReport.getAccountsPayable().toString());
+            }
+            row.createCell(colIndex++).setCellValue(accountsPayable);
+
+            Double actualPayment = null;
+            if (tradeReport.getActualPayment() != null) {
+                actualPayment = Double.parseDouble(tradeReport.getActualPayment().toString());
+            }
+            row.createCell(colIndex++).setCellValue(actualPayment);
+            Double unpaidPayments = null;
+            if (tradeReport.getUnpaidPayments() != null) {
+                unpaidPayments = Double.parseDouble(tradeReport.getUnpaidPayments().toString());
+            }
+            row.createCell(colIndex++).setCellValue(unpaidPayments);
+            Double profit = null;
+            if (tradeReport.getProfit() != null) {
+                profit = Double.parseDouble(tradeReport.getProfit().toString());
+            }
+            row.createCell(colIndex++).setCellValue(profit);
+            row.createCell(colIndex++).setCellValue(tradeReport.getBak());
+        }
+
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+        try {
+            workbook.write(output);
+
+            byte[] buffer = output.toByteArray();
+            ByteArrayInputStream input = new ByteArrayInputStream(buffer);
+
+            downloadUrl = OSSUtil.upload(ossConfig, "tradeReport", "分类统计贸易表" + sdf.format(new Date()) + ".xls", input);
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+        }
+
+        return downloadUrl;
+    }
+}

+ 364 - 0
web/src/main/java/com/jpsoft/railroad/modules/base/controller/TransportInfoController.java

@@ -0,0 +1,364 @@
+package com.jpsoft.railroad.modules.base.controller;
+
+import com.github.pagehelper.Page;
+import com.jpsoft.railroad.config.OSSConfig;
+import com.jpsoft.railroad.modules.common.utils.OSSUtil;
+import com.jpsoft.railroad.modules.common.utils.PojoUtils;
+import com.jpsoft.railroad.modules.common.dto.Sort;
+import com.jpsoft.railroad.modules.common.dto.MessageResult;
+import com.jpsoft.railroad.modules.base.entity.TransportInfo;
+import com.jpsoft.railroad.modules.base.service.TransportInfoService;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.util.CellRangeAddress;
+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/transportInfo")
+public class TransportInfoController {
+    private Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    private TransportInfoService transportInfoService;
+
+    @Autowired
+    private OSSConfig ossConfig;
+
+
+    @ApiOperation(value = "创建空记录")
+    @GetMapping("create")
+    public MessageResult<TransportInfo> create() {
+        MessageResult<TransportInfo> msgResult = new MessageResult<>();
+
+        TransportInfo transportInfo = new TransportInfo();
+
+        msgResult.setData(transportInfo);
+        msgResult.setResult(true);
+
+        return msgResult;
+    }
+
+    @ApiOperation(value = "添加信息")
+    @PostMapping("add")
+    public MessageResult<TransportInfo> add(@RequestBody TransportInfo transportInfo, @RequestAttribute String subject) {
+        MessageResult<TransportInfo> msgResult = new MessageResult<>();
+
+        try {
+            transportInfo.setId(UUID.randomUUID().toString());
+            transportInfo.setDelFlag(false);
+            transportInfo.setCreateBy(subject);
+            transportInfo.setCreateTime(new Date());
+
+            TransportInfo lastItem = transportInfoService.findLastIndex();
+            if (lastItem == null) {
+                transportInfo.setIndex(1);
+            } else {
+                transportInfo.setIndex(lastItem.getIndex() + 1);
+            }
+
+            int affectCount = transportInfoService.insert(transportInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(transportInfo);
+            } 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<TransportInfo> edit(@PathVariable("id") String id) {
+        MessageResult<TransportInfo> msgResult = new MessageResult<>();
+
+        try {
+            TransportInfo transportInfo = transportInfoService.get(id);
+
+            if (transportInfo != null) {
+                msgResult.setResult(true);
+                msgResult.setData(transportInfo);
+            } 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<TransportInfo> update(@RequestBody TransportInfo transportInfo, @RequestAttribute String subject) {
+        MessageResult<TransportInfo> msgResult = new MessageResult<>();
+
+        try {
+            transportInfo.setUpdateBy(subject);
+            transportInfo.setUpdateTime(new Date());
+
+            int affectCount = transportInfoService.update(transportInfo);
+
+            if (affectCount > 0) {
+                msgResult.setResult(true);
+                msgResult.setData(transportInfo);
+            } 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<TransportInfo> delete(@PathVariable("id") String id, @RequestAttribute String subject) {
+        MessageResult<TransportInfo> msgResult = new MessageResult<>();
+
+        try {
+
+            TransportInfo transportInfo = transportInfoService.get(id);
+            transportInfo.setDelFlag(true);
+            transportInfo.setUpdateBy(subject);
+            transportInfo.setUpdateTime(new Date());
+
+            int affectCount = transportInfoService.update(transportInfo);
+
+            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) {
+                TransportInfo transportInfo = transportInfoService.get(id);
+                transportInfo.setDelFlag(true);
+                transportInfo.setUpdateBy(subject);
+                transportInfo.setUpdateTime(new Date());
+
+                affectCount += transportInfoService.update(transportInfo);
+            }
+
+            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 id,
+            @RequestParam(value = "pageIndex", defaultValue = "1") int pageIndex,
+            @RequestParam(value = "pageSize", defaultValue = "20") 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"));
+
+            if (StringUtils.isNotEmpty(id)) {
+                searchParams.put("id", "%" + id + "%");
+            }
+
+
+            Page<TransportInfo> page = transportInfoService.pageSearch(searchParams, pageIndex, pageSize, true, sortList);
+            if (exportFlag) {
+                List<TransportInfo> transportInfoList = page.getResult();
+                BigDecimal total1 = BigDecimal.ZERO;
+                BigDecimal total2 = BigDecimal.ZERO;
+                BigDecimal total3 = BigDecimal.ZERO;
+                BigDecimal total4 = BigDecimal.ZERO;
+
+                for (TransportInfo item : transportInfoList) {
+                    total1 = total1.add(item.getTonnage());
+                    total2 = total2.add(item.getExpenditure());
+                    total3 = total3.add(item.getIncome());
+                    total4 = total4.add(item.getProfit());
+
+                }
+                TransportInfo transportInfo = new TransportInfo();
+                transportInfo.setTonnage(total1);
+                transportInfo.setExpenditure(total2);
+                transportInfo.setIncome(total3);
+                transportInfo.setProfit(total4);
+
+                transportInfoList.add(transportInfo);
+
+                String filePath = exportXls(transportInfoList);
+                msgResult.setData(filePath);
+                msgResult.setResult(true);
+            } else {
+                Map<String, Object> dataMap = PojoUtils.pageWrapper(page);
+
+                msgResult.setResult(true);
+                msgResult.setData(dataMap);
+            }
+        } catch (Exception ex) {
+            ex.printStackTrace();
+            logger.error(ex.getMessage(), ex);
+
+            msgResult.setResult(false);
+            msgResult.setMessage(ex.getMessage());
+
+        }
+
+
+        return msgResult;
+    }
+
+
+    private String exportXls(List<TransportInfo> transportInfoList) {
+        String downloadUrl = "";
+
+        Workbook workbook = new HSSFWorkbook();
+        Sheet sheet = workbook.createSheet();
+
+        //表头
+        Row rowTitle1 = sheet.createRow(0);
+
+        String[] titles = new String[]{"序号", "日期", "品名", "吨数", "支出", "收入", "利润"};
+
+        HSSFCellStyle cellStyle = ((HSSFWorkbook) workbook).createCellStyle();
+        cellStyle.setAlignment(HorizontalAlignment.CENTER);
+        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+
+        for (int i = 0; i < titles.length; i++) {
+            Cell cell = rowTitle1.createCell(i);
+            cell.setCellValue(titles[i]);
+            cell.setCellStyle(cellStyle);
+        }
+
+
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+
+        for (int i = 0; i < transportInfoList.size(); i++) {
+            TransportInfo transportInfo = transportInfoList.get(i);
+
+            Row row = sheet.createRow(i + 1);
+
+            int colIndex = 0;
+            Integer index;
+            if (transportInfo.getIndex() != null) {
+                index = transportInfo.getIndex();
+                row.createCell(colIndex++).setCellValue(index);
+            }
+            else{
+                row.createCell(colIndex++).setCellValue("合计");
+            }
+
+            String month = "";
+            if (transportInfo.getMonth() != null) {
+                month = sdf.format(transportInfo.getMonth());
+            }
+            row.createCell(colIndex++).setCellValue(month);
+            row.createCell(colIndex++).setCellValue(transportInfo.getProductName());
+            Double tonnage = null;
+            if (transportInfo.getTonnage() != null) {
+                tonnage = Double.parseDouble(transportInfo.getTonnage().toString());
+            }
+            row.createCell(colIndex++).setCellValue(tonnage);
+            Double expenditure = null;
+            if (transportInfo.getExpenditure() != null) {
+                expenditure = Double.parseDouble(transportInfo.getExpenditure().toString());
+            }
+            row.createCell(colIndex++).setCellValue(expenditure);
+            Double income = null;
+            if (transportInfo.getIncome() != null) {
+                income = Double.parseDouble(transportInfo.getIncome().toString());
+            }
+            row.createCell(colIndex++).setCellValue(income);
+            Double profit = null;
+            if (transportInfo.getProfit() != null) {
+                profit = Double.parseDouble(transportInfo.getProfit().toString());
+            }
+            row.createCell(colIndex++).setCellValue(profit);
+        }
+
+        ByteArrayOutputStream output = new ByteArrayOutputStream();
+
+        try {
+            workbook.write(output);
+
+            byte[] buffer = output.toByteArray();
+            ByteArrayInputStream input = new ByteArrayInputStream(buffer);
+
+            downloadUrl = OSSUtil.upload(ossConfig, "tradeReport", "分类统计无船承运表" + sdf.format(new Date()) + ".xls", input);
+        } catch (Exception ex) {
+            logger.error(ex.getMessage(), ex);
+        }
+
+        return downloadUrl;
+    }
+}