Browse Source

修改统计

albertshaw 7 years ago
parent
commit
aba57c54eb

+ 12 - 2
src/main/java/com/goafanti/common/dao/DailySalesReportMapper.java

@@ -14,7 +14,13 @@ public interface DailySalesReportMapper {
 
 	DailySalesReport selectByPrimaryKey(Long id);
 
-	int insertSalesReports(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
+	List<DailySalesReport> selectAdmins();
+
+	List<DailySalesReport> selectDailySalesReports(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
+
+	int insertBatch(List<DailySalesReport> list);
+
+	int deleteByDate(@Param("createTime") Date createTime);
 
 	List<PersonalSalesReportBO> selectSalesPersonalReports(@Param("startTime") Date startTime,
 			@Param("endTime") Date endTime, @Param("pageNo") Integer pageNo, @Param("pageSize") Integer pageSize,
@@ -22,10 +28,14 @@ public interface DailySalesReportMapper {
 			@Param("countField") String countField, @Param("amountField") String amountField,
 			@Param("depName") String depName, @Param("name") String name, @Param("position") String position);
 
+	Long selectSalesPersonalReportsCount(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
+			@Param("depName") String depName, @Param("name") String name, @Param("position") String position);
+
 	List<ModelMap> selectSalesPersonalExtraReports(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
 			@Param("ids") List<String> ids);
 
-	ModelMap selectTotalReports(@Param("startTime") Date startTime, @Param("endTime") Date endTime);
+	ModelMap selectTotalReports(@Param("startTime") Date startTime, @Param("endTime") Date endTime,
+			@Param("depName") String depName, @Param("name") String name, @Param("position") String position);
 
 	List<DepartmentSalesReportBO> selectSalesDepartmentReports();
 

+ 59 - 5
src/main/java/com/goafanti/common/mapper/DailySalesReportMapper.xml

@@ -18,15 +18,37 @@
     from daily_sales_report
     where id = #{id,jdbcType=INTEGER}
   </select>
-  <insert id="insertSalesReports">
-    insert into daily_sales_report 
-    (admin_id, dep_id, order_count, order_amount) 
+  
+  <select id="selectAdmins" resultMap="BaseResultMap">
+    select a.id as admin_id, dm.id as dep_id
+    from admin a
+    left join department_management dm on dm.id = a.department_id 
+  </select>
+  
+  <select id="selectDailySalesReports" resultMap="BaseResultMap">
     SELECT o.salesman_id as admin_id, a.department_id as dep_id,
 	count(o.order_no) as order_count, sum(o.order_amount) as order_amount
 	FROM aft.t_order o
 	left join aft.admin a on o.salesman_id=a.id
 	where o.order_status=3 and o.sign_time &gt;= #{startTime,jdbcType=TIMESTAMP} and o.sign_time &lt; #{endTime,jdbcType=TIMESTAMP}
 	group by o.salesman_id, a.department_id;
+  </select>
+  
+  <delete id="deleteByDate">
+    delete from daily_sales_report
+    where create_time = #{createTime,jdbcType=TIMESTAMP}
+  </delete>
+  
+  <insert id="insertBatch" parameterType="com.goafanti.common.model.DailySalesReport" >
+    insert into daily_sales_report (admin_id, dep_id, order_count, order_amount, create_time)
+    values 
+    <foreach item="item" index="index" collection="list" separator=",">
+        (#{item.adminId,jdbcType=VARCHAR},
+        #{item.depId,jdbcType=VARCHAR},
+        #{item.orderCount,jdbcType=INTEGER},
+        #{item.orderAmount,jdbcType=DECIMAL},
+        #{item.createTime,jdbcType=TIMESTAMP})
+    </foreach>
   </insert>
   
   <select id="selectSalesPersonalReports" resultType="com.goafanti.report.bo.PersonalSalesReportBO">
@@ -35,7 +57,7 @@
 	FROM admin a
 	left join daily_sales_report dsr on dsr.admin_id = a.id 
 	left join department_management dm on dm.id = dsr.dep_id 
-	where (dsr.create_time is null or (dsr.create_time &gt;= #{startTime,jdbcType=TIMESTAMP} and dsr.create_time &lt; #{endTime,jdbcType=TIMESTAMP}))
+	where dsr.create_time &gt;= #{startTime,jdbcType=TIMESTAMP} and dsr.create_time &lt; #{endTime,jdbcType=TIMESTAMP}
 	<if test="depName != null">
 		and dm.name like concat(#{depName,jdbcType=VARCHAR},'%')
 	</if>
@@ -52,6 +74,25 @@
     </if>
   </select>
   
+  <select id="selectSalesPersonalReportsCount" resultType="java.lang.Long">
+    SELECT count(distinct(a.id))
+	FROM admin a
+	left join daily_sales_report dsr on dsr.admin_id = a.id
+	<if test="depName != null"> 
+	left join department_management dm on dm.id = a.department_id 
+	</if>
+	where dsr.create_time &gt;= #{startTime,jdbcType=TIMESTAMP} and dsr.create_time &lt; #{endTime,jdbcType=TIMESTAMP}
+	<if test="depName != null">
+		and dm.name like concat(#{depName,jdbcType=VARCHAR},'%')
+	</if>
+	<if test="name != null">
+		and a.name like concat(#{name,jdbcType=VARCHAR},'%')
+	</if>
+	<if test="position != null">
+		and a.position like concat(#{position,jdbcType=VARCHAR},'%')
+	</if>
+  </select>
+  
   <select id="selectSalesPersonalExtraReports" resultType="org.springframework.ui.ModelMap">
     SELECT dsr.admin_id as id, sum(dsr.order_count) as order_count, sum(dsr.order_amount) as order_amount
 	FROM daily_sales_report dsr 
@@ -83,7 +124,20 @@
   
   <select id="selectTotalReports" resultType="org.springframework.ui.ModelMap">
     SELECT sum(dsr.order_count) as totalCount, sum(dsr.order_amount) as totalAmount
-	FROM daily_sales_report dsr 
+	FROM admin a
+	left join daily_sales_report dsr on dsr.admin_id = a.id
+	<if test="depName != null"> 
+	left join department_management dm on dm.id = a.department_id 
+	</if>
 	where dsr.create_time &gt;= #{startTime,jdbcType=TIMESTAMP} and dsr.create_time &lt; #{endTime,jdbcType=TIMESTAMP}
+	<if test="depName != null">
+		and dm.name like concat(#{depName,jdbcType=VARCHAR},'%')
+	</if>
+	<if test="name != null">
+		and a.name like concat(#{name,jdbcType=VARCHAR},'%')
+	</if>
+	<if test="position != null">
+		and a.position like concat(#{position,jdbcType=VARCHAR},'%')
+	</if>
   </select>
 </mapper>

+ 2 - 2
src/main/java/com/goafanti/common/model/DailySalesReport.java

@@ -24,12 +24,12 @@ public class DailySalesReport {
 	/**
 	* 销售签单数量
 	*/
-	private Integer		orderCount;
+	private Integer		orderCount	= 0;
 
 	/**
 	* 销售签单总额
 	*/
-	private BigDecimal	orderAmount;
+	private BigDecimal	orderAmount	= BigDecimal.ZERO;
 
 	public Integer getId() {
 		return id;

+ 1 - 1
src/main/java/com/goafanti/common/task/OrderReportTask.java

@@ -25,7 +25,7 @@ public class OrderReportTask {
 	 * "0 0 17 * * ?" 每天17点触发一次
 	 */
 	@Scheduled(cron = "0 0 17 * * ?")
-	public void exprireRun() {
+	public void runStatistics() {
 		LoggerUtils.debug(logger, "统计订单报表任务开始");
 		Calendar now = Calendar.getInstance();
 		now.set(Calendar.MILLISECOND, 0);

+ 25 - 2
src/main/java/com/goafanti/report/controller/ReportApiController.java

@@ -1,5 +1,6 @@
 package com.goafanti.report.controller;
 
+import java.util.Calendar;
 import java.util.Date;
 
 import org.apache.commons.lang3.StringUtils;
@@ -46,14 +47,15 @@ public class ReportApiController extends BaseApiController {
 	}
 
 	@RequestMapping(value = "/sales/total", method = RequestMethod.GET)
-	public Result total(String date) {
+	public Result total(String date, @RequestParam(required = false) String depName,
+			@RequestParam(required = false) String name, @RequestParam(required = false) String position) {
 		Date startTime = null;
 		try {
 			startTime = DateUtils.parseDate(date, AFTConstants.YYYYMMDDHHMMSS);
 		} catch (Exception e) {
 			startTime = new Date();
 		}
-		return res().data(reportService.getReportTotal(startTime));
+		return res().data(reportService.getReportTotal(startTime, depName, name, position));
 	}
 
 	@RequestMapping(value = "/sales/department", method = RequestMethod.GET)
@@ -67,4 +69,25 @@ public class ReportApiController extends BaseApiController {
 		return res().data(reportService.getDepartmentSalesReports(startTime));
 	}
 
+	@RequestMapping(value = "/sales/doStatistics", method = RequestMethod.GET)
+	public Result doStatistics(String date) {
+		Date dateTime = null;
+		try {
+			dateTime = DateUtils.parseDate(date, AFTConstants.YYYYMMDDHHMMSS);
+		} catch (Exception e) {
+			dateTime = new Date();
+		}
+		Calendar now = Calendar.getInstance();
+		now.setTime(dateTime);
+		now.set(Calendar.MILLISECOND, 0);
+		now.set(Calendar.SECOND, 0);
+		now.set(Calendar.MINUTE, 0);
+		now.set(Calendar.HOUR_OF_DAY, 17);
+		Date start = new Calendar.Builder()
+				.setDate(now.get(Calendar.YEAR), now.get(Calendar.MONTH), now.get(Calendar.DAY_OF_MONTH) - 1)
+				.setTimeOfDay(17, 0, 0, 0).build().getTime();
+		// 统计从指定日期前一天的17点到指定日期17点的数据,算作改日期数据
+		return res().data(reportService.insertDailyReports(start, now.getTime()));
+	}
+
 }

+ 33 - 9
src/main/java/com/goafanti/report/service/SalesReportServiceImpl.java

@@ -17,6 +17,7 @@ import org.springframework.ui.ModelMap;
 import com.goafanti.common.constant.AFTConstants;
 import com.goafanti.common.dao.DailySalesReportMapper;
 import com.goafanti.common.error.BusinessException;
+import com.goafanti.common.model.DailySalesReport;
 import com.goafanti.core.mybatis.BaseMybatisDao;
 import com.goafanti.report.bo.DepartmentSalesReportBO;
 import com.goafanti.report.bo.PersonalSalesReportBO;
@@ -32,22 +33,45 @@ public class SalesReportServiceImpl extends BaseMybatisDao<DailySalesReportMappe
 	DailySalesReportMapper salesReportMapper;
 
 	public int insertDailyReports(Date startTime, Date endTime) {
-		return salesReportMapper.insertSalesReports(startTime, endTime);
+		List<DailySalesReport> list = salesReportMapper.selectAdmins();
+		Map<String, DailySalesReport> map = new HashMap<>();
+		for (DailySalesReport dsr : list) {
+			dsr.setCreateTime(endTime);
+			map.put(dsr.getAdminId(), dsr);
+		}
+		List<DailySalesReport> reports = salesReportMapper.selectDailySalesReports(startTime, endTime);
+		for (DailySalesReport dsr : reports) {
+			DailySalesReport item = map.get(dsr.getAdminId());
+			if (item != null) {
+				item.setOrderAmount(item.getOrderAmount().add(dsr.getOrderAmount()));
+				item.setOrderCount(item.getOrderCount() + dsr.getOrderCount());
+			}
+		}
+		salesReportMapper.deleteByDate(endTime);
+		return salesReportMapper.insertBatch(list);
 	}
 
-	public ModelMap getReportTotal(Date startTime) {
+	public ModelMap getReportTotal(Date startTime, String depName, String name, String position) {
 		ReportDate rd = new ReportDate(startTime);
 		ModelMap mm = new ModelMap();
-		putField(mm, "dailyTotalCount", "dailyTotalAmount", rd.getDailyStart(), rd.getDailyEnd());
-		putField(mm, "weeklyTotalCount", "weeklyTotalAmount", rd.getWeeklyStart(), rd.getWeeklyEnd());
-		putField(mm, "monthlyTotalCount", "monthlyTotalAmount", rd.getMonthStart(), rd.getMonthEnd());
-		putField(mm, "quarterlyTotalCount", "quarterlyTotalAmount", rd.getQuarterStart(), rd.getQuarterEnd());
-		putField(mm, "annuallyTotalCount", "annuallyTotalAmount", rd.getYearStart(), rd.getYearEnd());
+		putField(mm, "dailyTotalCount", "dailyTotalAmount", rd.getDailyStart(), rd.getDailyEnd(), depName, name,
+				position);
+		putField(mm, "weeklyTotalCount", "weeklyTotalAmount", rd.getWeeklyStart(), rd.getWeeklyEnd(), depName, name,
+				position);
+		putField(mm, "monthlyTotalCount", "monthlyTotalAmount", rd.getMonthStart(), rd.getMonthEnd(), depName, name,
+				position);
+		putField(mm, "quarterlyTotalCount", "quarterlyTotalAmount", rd.getQuarterStart(), rd.getQuarterEnd(), depName,
+				name, position);
+		putField(mm, "annuallyTotalCount", "annuallyTotalAmount", rd.getYearStart(), rd.getYearEnd(), depName, name,
+				position);
+		mm.put("totalRecordCount", salesReportMapper.selectSalesPersonalReportsCount(rd.getDailyStart(),
+				rd.getDailyEnd(), depName, name, position));
 		return mm;
 	}
 
-	private void putField(ModelMap mm, String count, String amount, Date start, Date end) {
-		ModelMap res = salesReportMapper.selectTotalReports(start, end);
+	private void putField(ModelMap mm, String count, String amount, Date start, Date end, String depName, String name,
+			String position) {
+		ModelMap res = salesReportMapper.selectTotalReports(start, end, depName, name, position);
 		mm.put(count, res == null ? 0 : res.get("totalCount"));
 		mm.put(amount, res == null ? 0 : res.get("totalAmount"));
 	}