From 404c2fea96204bc0fc4a6845cb13d1992d728aa4 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 11 Nov 2021 14:53:24 +0800
Subject: [PATCH] Merge branch 'ty_fix' into alpha

---
 zq-erp/src/main/java/com/matrix/system/hive/statistics/AchieveAction.java              |   15 ++
 zq-erp/src/main/resources/templates/views/admin/hive/statistics/daily-beauty-list.html |  125 ++++++++++++++++++--
 zq-erp/src/main/resources/mybatis/mapper/hive/AchieveNewDao.xml                        |  125 ++++++++++++++++++++
 zq-erp/src/main/java/com/matrix/system/hive/dao/AchieveNewDao.java                     |    4 
 zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java     |   11 +
 zq-erp/src/main/java/com/matrix/system/hive/vo/DailyBeautyListVo.java                  |   44 +++++++
 zq-erp/src/main/java/com/matrix/system/hive/service/AchieveNewService.java             |    4 
 7 files changed, 312 insertions(+), 16 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dao/AchieveNewDao.java b/zq-erp/src/main/java/com/matrix/system/hive/dao/AchieveNewDao.java
index e0bcaa2..a1e0e1b 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dao/AchieveNewDao.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/dao/AchieveNewDao.java
@@ -10,6 +10,7 @@
 import com.matrix.system.hive.bean.AchieveNew;
 import com.matrix.system.hive.dto.AchieveNewStatisticsDto;
 import com.matrix.system.hive.vo.AchieveNewStatisticsVo;
+import com.matrix.system.hive.vo.DailyBeautyListVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.ArrayList;
@@ -93,4 +94,7 @@
 	 void setPayMethod(@Param("paymethod") String paymethod, @Param("list")  ArrayList<Long> ids);
 
 	 List<RankingVo> selectNumOfPeopleAchieveRanking(@Param("record") AchieveNew achieveNew);
+
+	List<DailyBeautyListVo> selectDailyBeautyList(@Param("record") AchieveNew achieveNew, @Param("pageVo") PaginationVO pageVo);
+	int selectDailyBeautyListTotal(@Param("record") AchieveNew achieveNew);
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/AchieveNewService.java b/zq-erp/src/main/java/com/matrix/system/hive/service/AchieveNewService.java
index bdf9228..0698dac 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/AchieveNewService.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/AchieveNewService.java
@@ -6,6 +6,7 @@
 import com.matrix.system.hive.bean.SysOrder;
 import com.matrix.system.hive.bean.SysProjServices;
 import com.matrix.system.hive.plugin.util.BaseServices;
+import com.matrix.system.hive.vo.DailyBeautyListVo;
 
 import java.util.List;
 import java.util.Map;
@@ -117,4 +118,7 @@
 
 	public List<AchieveNew> findOrderItemAchieve(Long orderid);
 
+	List<DailyBeautyListVo> findDailyBeautyList(AchieveNew achieveNew, PaginationVO pageVo);
+	int findDailyBeautyListTotal(AchieveNew achieveNew);
+
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java
index ff89cae..f7232e0 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/service/imp/AchieveNewServiceImpl.java
@@ -21,6 +21,7 @@
 import com.matrix.system.hive.plugin.util.CollectionUtils;
 import com.matrix.system.hive.service.AchieveNewService;
 import com.matrix.system.hive.service.SysProjServicesService;
+import com.matrix.system.hive.vo.DailyBeautyListVo;
 import com.matrix.system.hiveErp.pojo.AchieveRuleItem;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -469,4 +470,14 @@
     public List<AchieveNew> findOrderItemAchieve(Long orderId) {
         return achieveNewDao.selectOrderItemAchieveByOrderId(orderId);
     }
+
+    @Override
+    public List<DailyBeautyListVo> findDailyBeautyList(AchieveNew achieveNew, PaginationVO pageVo) {
+        return achieveNewDao.selectDailyBeautyList(achieveNew, pageVo);
+    }
+
+    @Override
+    public int findDailyBeautyListTotal(AchieveNew achieveNew) {
+        return achieveNewDao.selectDailyBeautyListTotal(achieveNew);
+    }
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/statistics/AchieveAction.java b/zq-erp/src/main/java/com/matrix/system/hive/statistics/AchieveAction.java
index 354a30d..9901970 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/statistics/AchieveAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/statistics/AchieveAction.java
@@ -272,5 +272,20 @@
         }
     }
 
+    @RequestMapping(value = "/findDailyBeautyList")
+    @ResponseBody
+    public AjaxResult findDailyBeautyList(@RequestBody  AchieveNew achieveNew) {
+        SysUsers sysUsers = (SysUsers) WebUtil.getSession().getAttribute(MatrixConstance.LOGIN_KEY);
+        achieveNew.setCompanyId(sysUsers.getCompanyId());
+        if (!DataAuthUtil.hasAllShopAuth()) {
+            achieveNew.setShopId(sysUsers.getShopId());
+        }
+        PaginationVO pageVo = new PaginationVO();
+
+        pageVo.setOffset(achieveNew.getOffset());
+        pageVo.setLimit(achieveNew.getLimit());
+        return AjaxResult.buildSuccessInstance(achieveNewService.findDailyBeautyList(achieveNew, pageVo), achieveNewService.findDailyBeautyListTotal(achieveNew));
+    }
+
 }
 
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/vo/DailyBeautyListVo.java b/zq-erp/src/main/java/com/matrix/system/hive/vo/DailyBeautyListVo.java
new file mode 100644
index 0000000..f74f5bc
--- /dev/null
+++ b/zq-erp/src/main/java/com/matrix/system/hive/vo/DailyBeautyListVo.java
@@ -0,0 +1,44 @@
+package com.matrix.system.hive.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class DailyBeautyListVo {
+
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone="GMT+8")
+    private Date datatime;
+
+    private String beautyName;
+
+    private String vipName;
+
+    private int isAppoint;
+
+    private String arrivalWay;
+
+    private int orderCnt;
+
+    private int arriveCnt;
+
+    private String payMethods;
+
+    private BigDecimal teamPay;
+
+    private BigDecimal tcAndProjCash;
+
+    private BigDecimal productCash;
+
+    private BigDecimal cardCash;
+
+    private BigDecimal cardPay;
+
+    private BigDecimal consume;
+
+    private Integer projCnt;
+
+    private BigDecimal ticheng;
+}
diff --git a/zq-erp/src/main/resources/mybatis/mapper/hive/AchieveNewDao.xml b/zq-erp/src/main/resources/mybatis/mapper/hive/AchieveNewDao.xml
index ac64cfa..091ac7f 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/hive/AchieveNewDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/hive/AchieveNewDao.xml
@@ -1239,4 +1239,129 @@
 		group by a.beault_id
 		order by amount desc
 	</select>
+
+	<select id="selectDailyBeautyList" resultType="com.matrix.system.hive.vo.DailyBeautyListVo">
+		select
+			date_format(b.datatime, '%Y-%m-%d') datatime,
+			a.su_id,
+			a.su_name beautyName,
+			c.id vipId,
+			c.VIP_NAME,
+			c.arrival_way,
+			case when c.BEATUY_ID=a.su_id then 1 else 0 end isAppoint,
+			(select count(distinct date_format(n.datatime, '%Y-%m-%d')) from achieve_new n
+			 where date_format(b.datatime, '%Y-%m') = date_format(n.datatime, '%Y-%m') and n.vip_id=c.ID
+			 group by date_format(n.datatime, '%Y-%m-%d'))arriveCnt,
+			(select count(1) from sys_order o where o.statu in ('欠款', '已付款') and o.VIP_ID=c.id)  orderCnt,
+			(select group_concat(distinct q.pay_method) payMethod from sys_order p
+			   inner join sys_order_flow q on p.ID=q.ORDER_ID
+			   inner join achieve_new o on o.order_id=p.id
+			 where date_format(pay_time, '%Y-%m-%d') = date_format(b.datatime, '%Y-%m-%d') and o.beault_id=a.su_id and c.ID=q.vip_id and p.STATU in ('欠款', '已付款')
+			 group by p.VIP_ID) payMethods,
+			(select sum(amount) from sys_order_flow x
+				 inner join achieve_new y on x.order_id=y.order_id
+			 where x.pay_method='团购' and date_format(x.create_time, '%Y-%m-%d') = date_format(b.datatime, '%Y-%m-%d')
+			   and y.beault_id=a.su_id and x.vip_id=c.id ) teamPay,
+			(select sum(m.ZK_PRICE) from sys_order_item m
+				 inner join achieve_new n on n.ORDER_ID=m.order_id
+			 where date_format(m.create_time, '%Y-%m-%d') = date_format(b.datatime, '%Y-%m-%d')
+			   and m.type in ('套餐', '项目') and n.beault_id=a.su_id) tcAndProjCash,
+			(select sum(m.ZK_PRICE) from sys_order_item m
+				 inner join achieve_new n on n.ORDER_ID=m.order_id
+			 where date_format(m.create_time, '%Y-%m-%d') = date_format(b.datatime, '%Y-%m-%d')
+			   and m.type in ('家居产品') and n.beault_id=a.su_id) productCash,
+			(select sum(m.ZK_PRICE) from sys_order_item m
+				 inner join achieve_new n on n.ORDER_ID=m.order_id
+			 where date_format(m.create_time, '%Y-%m-%d') = date_format(b.datatime, '%Y-%m-%d')
+			   and m.type in ('充值卡') and n.beault_id=a.su_id) cardCash,
+			(select sum(amount) from sys_order_flow x
+				 inner join achieve_new y on x.order_id=y.order_id
+			 where x.pay_method='储值卡' and date_format(x.create_time, '%Y-%m-%d') = date_format(b.datatime, '%Y-%m-%d')
+			   and y.beault_id=a.su_id and x.vip_id=c.id) cardPay,
+			sum(proj_percentage) ticheng,
+			sum(IFNULL(free_consume,0) + IFNULL(his_consume,0)) consume,
+			(select count(1) from achieve_new z where z.beault_id=a.su_id and c.id=z.vip_id group by z.beault_id,z.vip_id) projCnt
+		from sys_users a
+			 left join achieve_new b on a.su_id=b.beault_id
+			 left join sys_vip_info c on b.vip_id=c.ID
+			 left join (
+					select x.vip_id, count(1) arriveCnt
+					from (
+							 select vip_id, date_format(datatime, '%Y-%m-%d')
+							 from achieve_new
+							 where date_format(curdate(), '%Y-%m') = date_format(datatime, '%Y-%m')
+							 group by date_format(datatime, '%Y-%m-%d'), vip_id
+						 ) x group by x.vip_id
+		) d on c.id=d.vip_id
+		where 1=1
+		<if test="record.companyId != null">
+		 and a.company_id=#{record.companyId}
+		</if>
+		<if test="record.shopId != null">
+		  and a.shop_id=#{record.shopId}
+		</if>
+		<if test="record.beginTime != null">
+			and date_format(b.datatime, '%Y-%m-%d') > date_format(#{record.beginTime}, '%Y-%m-%d')
+		</if>
+		<if test="record.endTime != null">
+			and date_format(#{record.endTime}, '%Y-%m-%d') > date_format(b.datatime, '%Y-%m-%d')
+		</if>
+		<if test="record.beaultId != null">
+			and a.su_id=#{record.beaultId}
+		</if>
+		<if test="record.vipQueryKey != null and record.vipQueryKey != ''">
+			and c.vip_name like concat('%', #{record.vipQueryKey}, '%')
+		</if>
+		<if test="record.beginTime == null and record.endTime == null">
+			and date_format(b.datatime, '%Y-%m') = date_format(now(), '%Y-%m')
+		</if>
+		group by date_format(b.datatime, '%Y-%m-%d'), a.su_id, c.ID
+		<if test="pageVo !=null"><!-- 判断pageVo对象是否为空 -->
+			order by date_format(b.datatime, '%Y-%m-%d') desc, a.su_id
+			<if test="pageVo.offset >=0  and pageVo.limit >0">
+				limit
+				#{pageVo.offset},#{pageVo.limit}
+			</if>
+		</if>
+	</select>
+
+	<select id="selectDailyBeautyListTotal" resultType="java.lang.Integer">
+		select count(1) from (
+			 select
+				 date_format(b.datatime, '%Y-%m-%d') datatime,
+				 a.su_id,
+				 a.su_name,
+				 c.id vipId,
+				 c.VIP_NAME,
+				 c.arrival_way,
+				 sum(proj_percentage) ticheng,
+				 sum(IFNULL(free_consume,0) + IFNULL(his_consume,0)) consume
+			 from sys_users a
+					  left join achieve_new b on a.su_id=b.beault_id
+					  left join sys_vip_info c on b.vip_id=c.ID
+			where 1=1
+			<if test="record.companyId != null">
+				and a.company_id=#{record.companyId}
+			</if>
+			<if test="record.shopId != null">
+				and a.shop_id=#{record.shopId}
+			</if>
+			<if test="record.beginTime != null">
+				and date_format(b.datatime, '%Y-%m-%d') > date_format(#{record.beginTime}, '%Y-%m-%d')
+			</if>
+			<if test="record.endTime != null">
+				and date_format(#{record.endTime}, '%Y-%m-%d') > date_format(b.datatime, '%Y-%m-%d')
+			</if>
+			<if test="record.beaultId != null">
+				and a.su_id=#{record.beaultId}
+			</if>
+			<if test="record.vipQueryKey != null and record.vipQueryKey != ''">
+				and c.vip_name like concat('%', #{record.vipQueryKey}, '%')
+			</if>
+			<if test="record.beginTime == null and record.endTime == null">
+				and date_format(b.datatime, '%Y-%m') = date_format(now(), '%Y-%m')
+			</if>
+			 group by date_format(b.datatime, '%Y-%m-%d'), a.su_id, c.ID
+		) a
+	</select>
 </mapper>
\ No newline at end of file
diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/statistics/daily-beauty-list.html b/zq-erp/src/main/resources/templates/views/admin/hive/statistics/daily-beauty-list.html
index 9e73633..b2e5261 100644
--- a/zq-erp/src/main/resources/templates/views/admin/hive/statistics/daily-beauty-list.html
+++ b/zq-erp/src/main/resources/templates/views/admin/hive/statistics/daily-beauty-list.html
@@ -26,36 +26,78 @@
 		border: 1px solid #DCDFE6;
 		background-color: white;
 	}
+	.search-form {
+		background-color: white;
+		padding-top: 10px;
+		padding-left: 20px;
+		padding-bottom: 10px;
+	}
 </style>
 <body>
 <div id="app" style="">
+	<el-row class="search-form">
+		<el-form ref="form" :model="form" inline>
+			<el-form-item label="日期范围">
+				<el-date-picker v-model="form.timeRange"
+								type="datetimerange"
+								range-separator="至"
+								start-placeholder="开始日期"
+								end-placeholder="结束日期">
+				</el-date-picker>
+			</el-form-item>
+			<el-form-item label="业绩归属人">
+				<el-select v-model="form.beaultId" placeholder="请选择">
+					<el-option v-for="item in achieveUsers"
+							   :key="item.suId"
+							   :label="item.suName"
+							   :value="item.suId"></el-option>
+				</el-select>
+			</el-form-item>
+			<el-form-item label="会员">
+				<el-input v-model="form.vipQueryKey"></el-input>
+			</el-form-item>
+			<el-button type="primary" @click="search" >搜索</el-button>
+			<el-button @click="resetForm('form')">重置</el-button>
+<!--			<el-button type="warning" @click="exportExcel">导出</el-button>-->
+		</el-form>
+	</el-row>
 	<el-row class="table-style">
 		<el-table :data="tableData" style="width: 100%">
 			<el-table-column type="index" width="30" fixed="left"></el-table-column>
 			<el-table-column prop="datatime" width="150" label="时间" fixed="left"></el-table-column>
-			<el-table-column prop="orderType" label="美疗师" fixed="left"></el-table-column>
-			<el-table-column prop="orderType" label="客户" fixed="left"></el-table-column>
-			<el-table-column prop="orderType" label="是否指定客" width="100"></el-table-column>
+			<el-table-column prop="beautyName" label="美疗师" fixed="left"></el-table-column>
+			<el-table-column prop="vipName" label="客户" fixed="left"></el-table-column>
+			<el-table-column prop="isAppoint" label="是否指定客" width="100">
+				<template slot-scope="scope">
+					<span v-if="scope.row.isAppoint ==1 ">是</span>
+					<span v-else>否</span>
+				</template>
+			</el-table-column>
 			<el-table-column label="客流">
-				<el-table-column prop="orderType" label="是否会员"></el-table-column>
-				<el-table-column prop="orderType" label="到店途径"></el-table-column>
-				<el-table-column prop="orderType" label="当月到店次数" width="120"></el-table-column>
+				<el-table-column prop="orderCnt" label="是否会员">
+					<template slot-scope="scope">
+						<span v-if="scope.row.orderCnt > 0">是</span>
+						<span v-else>否</span>
+					</template>
+				</el-table-column>
+				<el-table-column prop="arrivalWay" label="到店途径"></el-table-column>
+				<el-table-column prop="arriveCnt" label="当月到店次数" width="120"></el-table-column>
 			</el-table-column>
 			<el-table-column label="实操业绩">
 				<el-table-column prop="orderType" label="项目->消耗产品" width="130"></el-table-column>
-				<el-table-column prop="orderType" label="消费类型"></el-table-column>
-				<el-table-column prop="orderType" label="项目数量"></el-table-column>
-				<el-table-column prop="orderType" label="手工费"></el-table-column>
-				<el-table-column prop="orderType" label="耗卡"></el-table-column>
+				<el-table-column prop="projCnt" label="项目数量"></el-table-column>
+				<el-table-column prop="ticheng" label="手工费"></el-table-column>
+				<el-table-column prop="consume" label="耗卡"></el-table-column>
 			</el-table-column>
 			<el-table-column label="现金业绩">
+				<el-table-column prop="payMethods" label="消费类型"></el-table-column>
 				<el-table-column prop="orderType" label="特色项目"></el-table-column>
-				<el-table-column prop="orderType" label="团购销售"></el-table-column>
-				<el-table-column prop="orderType" label="卡项销售"></el-table-column>
-				<el-table-column prop="orderType" label="产品销售"></el-table-column>
-				<el-table-column prop="orderType" label="会员充值"></el-table-column>
+				<el-table-column prop="teamPay" label="团购销售"></el-table-column>
+				<el-table-column prop="tcAndProjCash" label="卡项销售"></el-table-column>
+				<el-table-column prop="productCash" label="产品销售"></el-table-column>
+				<el-table-column prop="cardCash" label="会员充值"></el-table-column>
 				<el-table-column prop="orderType" label="总业绩"></el-table-column>
-				<el-table-column prop="orderType" label="划卡"></el-table-column>
+				<el-table-column prop="cardPay" label="划卡"></el-table-column>
 			</el-table-column>
 		</el-table>
 		<el-row style="margin-top: 10px;">
@@ -81,6 +123,11 @@
 		el : "#app",
 		data : {
 			tableData : [],
+			form : {
+				timeRange : '',
+				vipQueryKey : '',
+				beaultId : ''
+			},
 			page : {
 				currentPage : 1,
 				size : 10,
@@ -88,9 +135,55 @@
 			}
 		},
 		created : function() {
-
+			this.queryTableData();
+			this.queryAchieveUsers();
 		},
 		methods : {
+			queryTableData() {
+				let _this = this;
+				let params = {};
+				let page = _this.page;
+				let form = _this.form;
+
+				if (form.timeRange) {
+					params.beginTime = form.timeRange?moment(form.timeRange[0]).format("YYYY-MM-DD HH:mm"):'';
+					params.endTime = form.timeRange?moment(form.timeRange[1]).format("YYYY-MM-DD HH:mm"):'';
+				}
+				params.vipQueryKey=form.vipQueryKey;
+				params.beaultId=form.beaultId;
+				params.limit = page.size;
+				params.offset = (page.currentPage - 1) * page.size;
+				AjaxProxy.requst({
+					app: _this,
+					data: params,
+					url: basePath + "/admin/achieve/findDailyBeautyList",
+					callback: function (loj) {
+						_this.tableData = loj.rows;
+						_this.page.total = loj.total;
+					}
+				});
+			},
+			queryAchieveUsers() {
+				let _this = this;
+				AjaxProxy.requst({
+					app: _this,
+					url: basePath + '/admin/getShopStaffByRoleName',
+					callback: function (data) {
+						_this.achieveUsers = data.rows;
+					}
+				});
+			},
+			resetForm(formName) {
+				// this.$refs[formName].resetFields();
+				this.form = {
+					timeRange : '',
+					vipQueryKey : '',
+					beaultId : ''
+				}
+			},
+			search() {
+				this.queryTableData();
+			},
 			handleSizeChange(val) {
 				this.page.size = val;
 				this.queryTableData();

--
Gitblit v1.9.1