提交 04a682e8 authored 作者: 000516's avatar 000516

店内执行-大区/战区表

...@@ -3,6 +3,8 @@ package com.sfa.operation.controller.sales.core; ...@@ -3,6 +3,8 @@ package com.sfa.operation.controller.sales.core;
import com.sfa.common.core.constant.RoleConstants; import com.sfa.common.core.constant.RoleConstants;
import com.sfa.common.core.enums.ECode; import com.sfa.common.core.enums.ECode;
import com.sfa.common.core.exception.CheckedException; import com.sfa.common.core.exception.CheckedException;
import com.sfa.common.security.annotation.Logical;
import com.sfa.common.security.annotation.RequiresRoles;
import com.sfa.common.security.utils.SecurityUtils; import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.pojo.sales.request.SalesApRequest; import com.sfa.operation.pojo.sales.request.SalesApRequest;
import com.sfa.operation.service.qc.IQinceMarketEmployeeService; import com.sfa.operation.service.qc.IQinceMarketEmployeeService;
...@@ -31,8 +33,9 @@ public class ApDisplayCoreController { ...@@ -31,8 +33,9 @@ public class ApDisplayCoreController {
* 常规陈列 根据id更新 * 常规陈列 根据id更新
*/ */
@PutMapping("/core/{id}") @PutMapping("/core/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putDetail(@PathVariable("id") Long sadId, @RequestBody SalesApRequest request){ public void putDetail(@PathVariable("id") Long sadId, @RequestBody SalesApRequest request){
checkPermission(); // checkPermission();
request.setSadId(sadId); request.setSadId(sadId);
apDisplayCoreService.updateDetail(request); apDisplayCoreService.updateDetail(request);
} }
...@@ -41,8 +44,9 @@ public class ApDisplayCoreController { ...@@ -41,8 +44,9 @@ public class ApDisplayCoreController {
* 档期陈列 根据id更新 * 档期陈列 根据id更新
*/ */
@PutMapping("/core_pro/{id}") @PutMapping("/core_pro/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putProDisplayDetail(@PathVariable("id") Long sapdId, @RequestBody SalesApRequest request){ public void putProDisplayDetail(@PathVariable("id") Long sapdId, @RequestBody SalesApRequest request){
checkPermission(); // checkPermission();
request.setSapdId(sapdId); request.setSapdId(sapdId);
apDisplayCoreService.putProDisplayDetail(request); apDisplayCoreService.putProDisplayDetail(request);
} }
...@@ -51,8 +55,9 @@ public class ApDisplayCoreController { ...@@ -51,8 +55,9 @@ public class ApDisplayCoreController {
* 零食陈列 根据id更新 * 零食陈列 根据id更新
*/ */
@PutMapping("/core_snack/{id}") @PutMapping("/core_snack/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putSnackDisplayDetail(@PathVariable("id") Long sasdId, @RequestBody SalesApRequest request){ public void putSnackDisplayDetail(@PathVariable("id") Long sasdId, @RequestBody SalesApRequest request){
checkPermission(); // checkPermission();
request.setSasdId(sasdId); request.setSasdId(sasdId);
apDisplayCoreService.putSnackDisplayDetail(request); apDisplayCoreService.putSnackDisplayDetail(request);
} }
...@@ -61,8 +66,9 @@ public class ApDisplayCoreController { ...@@ -61,8 +66,9 @@ public class ApDisplayCoreController {
* 三米两秒 * 三米两秒
*/ */
@PutMapping("/core_s/{id}") @PutMapping("/core_s/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putDisplaySDetail(@PathVariable("id") Long sadsId, @RequestBody SalesApRequest request){ public void putDisplaySDetail(@PathVariable("id") Long sadsId, @RequestBody SalesApRequest request){
checkPermission(); // checkPermission();
request.setSadsId(sadsId); request.setSadsId(sadsId);
apDisplayCoreService.putDisplaySDetail(request); apDisplayCoreService.putDisplaySDetail(request);
} }
...@@ -71,27 +77,28 @@ public class ApDisplayCoreController { ...@@ -71,27 +77,28 @@ public class ApDisplayCoreController {
* 六小金刚 * 六小金刚
*/ */
@PutMapping("/core_j/{id}") @PutMapping("/core_j/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putDisplayJDetail(@PathVariable("id") Long sadjId, @RequestBody SalesApRequest request){ public void putDisplayJDetail(@PathVariable("id") Long sadjId, @RequestBody SalesApRequest request){
checkPermission(); // checkPermission();
request.setSadjId(sadjId); request.setSadjId(sadjId);
apDisplayCoreService.putDisplayJDetail(request); apDisplayCoreService.putDisplayJDetail(request);
} }
private void checkPermission(){ // private void checkPermission(){
// 是区域销售部的人员,查看人客关系 // // 是区域销售部的人员,查看人客关系
LoginUser loginUser = SecurityUtils.getLoginUser(); // LoginUser loginUser = SecurityUtils.getLoginUser();
// 只有销售(促销AP管理:cxapgl)、大区TM(大区TM促销AP管理:dqtmcxapgl)两种角色才可以修改 // // 只有销售(促销AP管理:cxapgl)、大区TM(大区TM促销AP管理:dqtmcxapgl)两种角色才可以修改
List<SysRole> roles = loginUser.getSysUser().getRoles(); // List<SysRole> roles = loginUser.getSysUser().getRoles();
Optional<SysRole> first = roles.stream().filter(role -> RoleConstants.DISTRICT_AP_MANAGER.equals(role.getRoleKey()) || RoleConstants.OPERATION_AP_MANAGER.equals(role.getRoleKey())).findFirst(); // Optional<SysRole> first = roles.stream().filter(role -> RoleConstants.DISTRICT_AP_MANAGER.equals(role.getRoleKey()) || RoleConstants.OPERATION_AP_MANAGER.equals(role.getRoleKey())).findFirst();
if (!first.isPresent()) { // if (!first.isPresent()) {
throw new CheckedException(ECode.ZZ_PRODUCT_QUALITY_AP_ERROR); // throw new CheckedException(ECode.ZZ_PRODUCT_QUALITY_AP_ERROR);
}
// String empNo = loginUser.getUsername();
// List<String> dealerCodes = qinceMarketEmployeeService.checkPermission(empNo);
// if (dealerCodes.isEmpty()){
// throw new CheckedException(ECode.QC_MARKET_EMP_ERROR);
// } // }
} //
//// String empNo = loginUser.getUsername();
//// List<String> dealerCodes = qinceMarketEmployeeService.checkPermission(empNo);
//// if (dealerCodes.isEmpty()){
//// throw new CheckedException(ECode.QC_MARKET_EMP_ERROR);
//// }
// }
} }
...@@ -3,6 +3,8 @@ package com.sfa.operation.controller.sales.core; ...@@ -3,6 +3,8 @@ package com.sfa.operation.controller.sales.core;
import com.sfa.common.core.constant.RoleConstants; import com.sfa.common.core.constant.RoleConstants;
import com.sfa.common.core.enums.ECode; import com.sfa.common.core.enums.ECode;
import com.sfa.common.core.exception.CheckedException; import com.sfa.common.core.exception.CheckedException;
import com.sfa.common.security.annotation.Logical;
import com.sfa.common.security.annotation.RequiresRoles;
import com.sfa.common.security.utils.SecurityUtils; import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.pojo.sales.request.SalesApRequest; import com.sfa.operation.pojo.sales.request.SalesApRequest;
import com.sfa.operation.service.qc.IQinceMarketEmployeeService; import com.sfa.operation.service.qc.IQinceMarketEmployeeService;
...@@ -27,27 +29,33 @@ public class ApPromotionCoreController { ...@@ -27,27 +29,33 @@ public class ApPromotionCoreController {
private IApPromotionCoreService apPromotionCoreService; private IApPromotionCoreService apPromotionCoreService;
@Autowired @Autowired
private IQinceMarketEmployeeService qinceMarketEmployeeService; private IQinceMarketEmployeeService qinceMarketEmployeeService;
/**
* 更新AP促销计划详情
* 大区总、战区经理、城市经理、TM,可以更新
*/
@PutMapping("/{id}") @PutMapping("/{id}")
@RequiresRoles(value = {RoleConstants.OPERATION_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public void putDetail(@PathVariable("id") Long sapId, @RequestBody SalesApRequest request) { public void putDetail(@PathVariable("id") Long sapId, @RequestBody SalesApRequest request) {
checkPermission(); // checkPermission();
request.setSapId(sapId); request.setSapId(sapId);
apPromotionCoreService.updateDetail(request); apPromotionCoreService.updateDetail(request);
} }
private void checkPermission(){ // private void checkPermission(){
// 是区域销售部的人员,查看人客关系 // // 是区域销售部的人员,查看人客关系
LoginUser loginUser = SecurityUtils.getLoginUser(); // LoginUser loginUser = SecurityUtils.getLoginUser();
// 只有销售(促销AP管理:cxapgl)、大区TM(大区TM促销AP管理:dqtmcxapgl)两种角色才可以修改 // // 只有销售(促销AP管理:cxapgl)、大区TM(大区TM促销AP管理:dqtmcxapgl)两种角色才可以修改
List<SysRole> roles = loginUser.getSysUser().getRoles(); // List<SysRole> roles = loginUser.getSysUser().getRoles();
Optional<SysRole> first = roles.stream().filter(role -> RoleConstants.DISTRICT_AP_MANAGER.equals(role.getRoleKey()) || RoleConstants.OPERATION_AP_MANAGER.equals(role.getRoleKey())).findFirst(); // Optional<SysRole> first = roles.stream().filter(role -> RoleConstants.DISTRICT_AP_MANAGER.equals(role.getRoleKey()) || RoleConstants.OPERATION_AP_MANAGER.equals(role.getRoleKey())).findFirst();
if (!first.isPresent()) { // if (!first.isPresent()) {
throw new CheckedException(ECode.ZZ_PRODUCT_QUALITY_AP_ERROR); // throw new CheckedException(ECode.ZZ_PRODUCT_QUALITY_AP_ERROR);
}
// String empNo = loginUser.getUsername();
// List<String> dealerCodes = qinceMarketEmployeeService.checkPermission(empNo);
// if (dealerCodes.isEmpty()){
// throw new CheckedException(ECode.QC_MARKET_EMP_ERROR);
// } // }
} //
//// String empNo = loginUser.getUsername();
//// List<String> dealerCodes = qinceMarketEmployeeService.checkPermission(empNo);
//// if (dealerCodes.isEmpty()){
//// throw new CheckedException(ECode.QC_MARKET_EMP_ERROR);
//// }
// }
} }
...@@ -3,6 +3,8 @@ package com.sfa.operation.controller.sales.query; ...@@ -3,6 +3,8 @@ package com.sfa.operation.controller.sales.query;
import com.sfa.common.core.constant.RoleConstants; import com.sfa.common.core.constant.RoleConstants;
import com.sfa.common.core.enums.ECode; import com.sfa.common.core.enums.ECode;
import com.sfa.common.core.exception.CheckedException; import com.sfa.common.core.exception.CheckedException;
import com.sfa.common.security.annotation.Logical;
import com.sfa.common.security.annotation.RequiresRoles;
import com.sfa.common.security.utils.SecurityUtils; import com.sfa.common.security.utils.SecurityUtils;
import com.sfa.operation.config.ConstantValue; import com.sfa.operation.config.ConstantValue;
import com.sfa.operation.pojo.sales.request.SalesApRequest; import com.sfa.operation.pojo.sales.request.SalesApRequest;
...@@ -36,8 +38,6 @@ public class APReportQueryController { ...@@ -36,8 +38,6 @@ public class APReportQueryController {
/** /**
* 店内执行-城市经理 * 店内执行-城市经理
* @param request
* @return
*/ */
@GetMapping("/store_cm") @GetMapping("/store_cm")
public Object queryStoreAPReport(SalesApRequest request) { public Object queryStoreAPReport(SalesApRequest request) {
...@@ -45,6 +45,16 @@ public class APReportQueryController { ...@@ -45,6 +45,16 @@ public class APReportQueryController {
return apDisplayQueryService.queryStoreAPReport(request); return apDisplayQueryService.queryStoreAPReport(request);
} }
/**
* 店内执行-大区/战区
*/
@GetMapping("/dept_cm")
@RequiresRoles(value = {RoleConstants.OPERATION_CENTER_AP_MANAGER, RoleConstants.OPERATIONZQ_AP_MANAGER, RoleConstants.OPERATIONDQ_AP_MANAGER, RoleConstants.DISTRICT_AP_MANAGER}, logical = Logical.OR)
public Object queryDeptAPReport(SalesApRequest request) {
checkPermissionDept(request);
return apDisplayQueryService.queryDeptAPReport(request);
}
private void checkPermission(SalesApRequest salesApRequest) { private void checkPermission(SalesApRequest salesApRequest) {
LoginUser loginUser = SecurityUtils.getLoginUser(); LoginUser loginUser = SecurityUtils.getLoginUser();
String ancestors = loginUser.getSysUser().getDept().getAncestors(); String ancestors = loginUser.getSysUser().getDept().getAncestors();
...@@ -72,4 +82,20 @@ public class APReportQueryController { ...@@ -72,4 +82,20 @@ public class APReportQueryController {
// salesApRequest.setNickName(loginUser.getNickName()); // salesApRequest.setNickName(loginUser.getNickName());
salesApRequest.setDealerCodes(dealerCodes); salesApRequest.setDealerCodes(dealerCodes);
} }
private void checkPermissionDept(SalesApRequest salesApRequest) {
LoginUser loginUser = SecurityUtils.getLoginUser();
String ancestors = loginUser.getSysUser().getDept().getAncestors();
List<SysRole> roles = loginUser.getSysUser().getRoles();
// 不是区域销售部的人员,可以查看所有
if (!ancestors.contains(constantValue.deptYX) && roles.stream().filter(role -> RoleConstants.OPERATION_CENTER_AP_MANAGER.equals(role.getRoleKey())).findFirst().isPresent()) {
return;
}
// 是区域销售部的人员按部门查询
String empNo = loginUser.getUsername();
String deptName = loginUser.getSysUser().getDept().getDeptName();
salesApRequest.setDeptNames("000889".equals(empNo) ? Arrays.asList(deptName, "北京特区") : Arrays.asList(deptName));
}
} }
...@@ -15,4 +15,6 @@ public interface ISalesApDisplayDao { ...@@ -15,4 +15,6 @@ public interface ISalesApDisplayDao {
void updateDetail(SalesApDisplayDto salesApDisplayDto); void updateDetail(SalesApDisplayDto salesApDisplayDto);
Object queryStoreAPReport(SalesApWq build); Object queryStoreAPReport(SalesApWq build);
Object queryDeptAPReport(SalesApWq build);
} }
...@@ -16,6 +16,9 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -16,6 +16,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
/** /**
...@@ -49,6 +52,17 @@ public class SalesApDisplayDaoImpl implements ISalesApDisplayDao { ...@@ -49,6 +52,17 @@ public class SalesApDisplayDaoImpl implements ISalesApDisplayDao {
return salesapdisMapper.queryStoreAPReport(build); return salesapdisMapper.queryStoreAPReport(build);
} }
@Override
public Object queryDeptAPReport(SalesApWq build) {
List<Map<String, Object>> mapZ = salesapdisMapper.queryDeptAPReportZQ(build);
List<Map<String, Object>> mapD = salesapdisMapper.queryDeptAPReportDQ(build);
Map<String,Object> r = new HashMap<>();
r.put("zq",mapZ);
r.put("dq",mapD);
return r;
}
private LambdaQueryWrapper<SalesApDisplay> buildWq(SalesApWq salesApWq) { private LambdaQueryWrapper<SalesApDisplay> buildWq(SalesApWq salesApWq) {
LambdaQueryWrapper<SalesApDisplay> qw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SalesApDisplay> qw = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(salesApWq.getDealerCode())) { if (StringUtils.isNotBlank(salesApWq.getDealerCode())) {
......
...@@ -18,6 +18,10 @@ import java.util.Map; ...@@ -18,6 +18,10 @@ import java.util.Map;
public interface SalesApDisplayMapper extends BaseMapper<SalesApDisplay> { public interface SalesApDisplayMapper extends BaseMapper<SalesApDisplay> {
List<Map<String,Object>> queryStoreAPReport(SalesApWq build); List<Map<String,Object>> queryStoreAPReport(SalesApWq build);
List<Map<String,Object>> queryDeptAPReportZQ(SalesApWq build);
List<Map<String, Object>> queryDeptAPReportDQ(SalesApWq build);
} }
......
...@@ -22,4 +22,6 @@ public interface IApDisplayQueryService { ...@@ -22,4 +22,6 @@ public interface IApDisplayQueryService {
PageInfo jgPage(SalesApRequest salesApRequest); PageInfo jgPage(SalesApRequest salesApRequest);
Object queryStoreAPReport(SalesApRequest request); Object queryStoreAPReport(SalesApRequest request);
Object queryDeptAPReport(SalesApRequest request);
} }
...@@ -64,6 +64,11 @@ public class ApDisplayQueryServiceImpl implements IApDisplayQueryService { ...@@ -64,6 +64,11 @@ public class ApDisplayQueryServiceImpl implements IApDisplayQueryService {
return salesApDisplayDao.queryStoreAPReport(build(salesApRequest)); return salesApDisplayDao.queryStoreAPReport(build(salesApRequest));
} }
@Override
public Object queryDeptAPReport(SalesApRequest request) {
return salesApDisplayDao.queryDeptAPReport(build(request));
}
private SalesApWq build(SalesApRequest salesApRequest){ private SalesApWq build(SalesApRequest salesApRequest){
SalesApWq salesApWq = new SalesApWq(); SalesApWq salesApWq = new SalesApWq();
BeanUtils.copyProperties(salesApRequest,salesApWq); BeanUtils.copyProperties(salesApRequest,salesApWq);
......
...@@ -306,4 +306,410 @@ ...@@ -306,4 +306,410 @@
ar.city_manager = sp.city_manager ar.city_manager = sp.city_manager
</select> </select>
<sql id = "deptZQQuery">
<if test="salesMonth != null">
and sales_month = #{salesMonth}
</if>
<if test="deptNames != null">
and (region_name in
<foreach collection="deptNames" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
or
district_name in
<foreach collection="deptNames" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
)
</if>
</sql>
<select id="queryDeptAPReportZQ" parameterType="com.sfa.operation.domain.sales.wq.SalesApWq" resultType="java.util.Map">
SELECT ar.region_name as regionName,
ar.district_name as districtName,
d.主货架计划网点数 as planMsStoreCnt,
d.主货架执行网点数 as execMsStoreCnt,
if(d.主货架计划网点数 is null, null,concat( round( coalesce(d.主货架执行网点数,0) / d.主货架计划网点数 *
100,2) ,'%')) as msExecRate,
d.常规端架计划网点数 as planRegEndcapStoreCnt,
d.常规端架执行网点数 as execRegEndcapStoreCnt,
if(d.常规端架计划网点数 is null, null,concat( round( coalesce(d.常规端架执行网点数,0) / d.常规端架计划网点数
* 100,2) ,'%')) as endcapExecRate,
d.常规地堆计划网点数 as planRegGsStoreCnt,
d.常规地堆执行网点数 as execRegGsStoreCnt,
if(d.常规地堆计划网点数 is null, null,concat( round( coalesce(d.常规地堆执行网点数,0) / d.常规地堆计划网点数
* 100,2) ,'%')) as gsExecRate,
d.多点陈列计划网点数 as planMpDispStoreCnt,
d.多点陈列执行网点数 as execMpDispStoreCnt,
if(d.多点陈列计划网点数 is null, null,concat( round( coalesce(d.多点陈列执行网点数,0) / d.多点陈列计划网点数
* 100,2) ,'%')) as mpDispExecRate,
d.挂条计划网点数 as planHsStoreCnt,
d.挂条执行网点数 as execHsStoreCnt,
if(d.挂条计划网点数 is null, null,concat( round( coalesce(d.挂条执行网点数,0) / d.挂条计划网点数 * 100,2)
,'%')) as HsExecRate,
s.三米两秒挂条计划网点数 as planSLStoreCnt,
s.三米两秒挂条执行网点数 as execSLStoreCnt,
if(s.三米两秒挂条计划网点数 is null, null,concat( round( coalesce(s.三米两秒挂条执行网点数,0) /
s.三米两秒挂条计划网点数 * 100,2) ,'%')) as SLExecRate,
j.批发挂网计划网点数 as planSixJdStoreCnt,
j.批发挂网执行网点数 as execSixJdStoreCnt,
if(j.批发挂网计划网点数 is null, null,concat( round( coalesce(j.批发挂网执行网点数,0) / j.批发挂网计划网点数
* 100,2) ,'%')) as sixJdExecRate,
pd.端架计划网点数 as planEndcapStoreCnt,
pd.端架执行网点数 as execEndcapStoreCnt,
if(pd.端架计划网点数 is null, null,concat( round( coalesce(pd.端架执行网点数,0) / pd.端架计划网点数 * 100,2)
,'%')) as endcapExecRatePromoPeriDisp,
pd.地堆计划网点数 as planGsStoreCnt,
pd.地堆执行网点数 as execGsStoreCnt,
if(pd.地堆计划网点数 is null, null,concat( round( coalesce(pd.地堆执行网点数,0) / pd.地堆计划网点数 * 100,2)
,'%')) as gsExecRatePromoPeriDisp,
pd.其他陈列计划网点数 as planOtherDispStoreCnt,
pd.其他陈列执行网点数 as execOtherDispStoreCnt,
if(pd.其他陈列计划网点数 is null, null,concat( round( coalesce(pd.其他陈列执行网点数,0) / pd.其他陈列计划网点数
* 100,2) ,'%')) as otherDispExecRatePromoPeriDisp,
sd.零食计划网点数 as planSnackStoreCnt,
sd.零食执行网点数 as execSnackStoreCnt,
if(sd.零食计划网点数 is null, null,concat( round( coalesce(sd.零食执行网点数,0) / sd.零食计划网点数 * 100,2)
,'%')) as snackExecRate,
sp.档期计划网点数 as planPromoPeriStoreCnt,
sp.档期开展网点数 as launchPromoPeriStoreCnt,
if(sp.档期计划网点数 is null, null,concat( round( coalesce(sp.档期开展网点数,0) / sp.档期计划网点数 * 100,2)
,'%')) as launchRatePromoPeriExec,
sp.促销规格执行网点数 as execPsStoreCnt,
if(sp.档期计划网点数 is null, null,concat( round( coalesce(sp.促销规格执行网点数,0) / sp.档期计划网点数 *
100,2) ,'%')) as psExecRatePromoPeriExec,
sp.促销口味执行网点数 as execPfStoreCnt,
if(sp.档期计划网点数 is null, null,concat( round( coalesce(sp.促销口味执行网点数,0) / sp.档期计划网点数 *
100,2) ,'%')) as pfExecRatePromoPeriExec,
sp.促销价执行网点数 as execPpStoreCnt,
if(sp.档期计划网点数 is null, null,concat( round( coalesce(sp.促销价执行网点数,0) / sp.档期计划网点数 *
100,2) ,'%')) as ppExecRatePromoPeriExec,
sp.海报计划网点数 as planPosterStoreCnt,
sp.海报执行网点数 as execPosterStoreCnt,
if(sp.海报计划网点数 is null, null,concat( round( coalesce(sp.海报执行网点数,0) / sp.海报计划网点数 * 100,2)
,'%')) as posterExecRate
FROM (
SELECT region_name, district_name
FROM sales_ap_display
<where>
<include refid="deptZQQuery"/>
</where>
UNION
SELECT region_name, district_name
FROM sales_ap_display_s
<where>
<include refid="deptZQQuery"/>
</where>
UNION
SELECT region_name, district_name
FROM sales_ap_display_j
<where>
<include refid="deptZQQuery"/>
</where>
UNION
SELECT region_name, district_name
FROM sales_ap_promotion_display
<where>
<include refid="deptZQQuery"/>
</where>
UNION
SELECT region_name, district_name
FROM sales_ap_snacks_display
<where>
<include refid="deptZQQuery"/>
</where>
UNION
SELECT region_name, district_name
FROM sales_ap_promotion
<where>
<include refid="deptZQQuery"/>
</where>
) AS ar
LEFT JOIN (select region_name,
district_name,
sum(main_shelf_type_sn) as 主货架计划网点数,
sum(if(actual_main_shelf_executed is not null and actual_main_shelf_executed = '执行', 1,
0)) as 主货架执行网点数,
sum(end_cap_qty_sn) as 常规端架计划网点数,
sum(if(actual_end_cap_executed is not null and actual_end_cap_executed = '执行', 1,
0)) as 常规端架执行网点数,
sum(floor_stack_area_sn) as 常规地堆计划网点数,
sum(if(actual_floor_stack_executed is not null and actual_floor_stack_executed = '执行', 1,
0)) as 常规地堆执行网点数,
sum(multi_point_display_sn) as 多点陈列计划网点数,
sum(if(actual_multi_display_executed is not null and actual_multi_display_executed = '执行',
1,
0)) as 多点陈列执行网点数,
sum(hanging_strip_sn) as 挂条计划网点数,
sum(if(hanging_strip_executed is not null and hanging_strip_executed = '执行', 1,
0)) as 挂条执行网点数
from sales_ap_display
<where>
<include refid="deptZQQuery"/>
</where>
group by region_name, district_name) d
ON ar.region_name = d.region_name AND ar.district_name = d.district_name
LEFT JOIN (select region_name,
district_name,
sum(display_sn60) 三米两秒挂条计划网点数,
sum(actual_display_qty60) 三米两秒挂条执行网点数
from sales_ap_display_s
<where>
<include refid="deptZQQuery"/>
</where>
group by region_name, district_name) s
ON ar.region_name = s.region_name AND ar.district_name = s.district_name
LEFT JOIN (select region_name,
district_name,
sum(gw_sn6) 批发挂网计划网点数,
sum(actual_gw6) 批发挂网执行网点数
from sales_ap_display_j
<where>
<include refid="deptZQQuery"/>
</where>
group by region_name, district_name) j
ON ar.region_name = j.region_name AND ar.district_name = j.district_name
left join (select region_name,
district_name,
sum(end_cap_sn) 端架计划网点数,
sum(if(actual_end_cap_executed is not null and actual_end_cap_executed = '执行', 1,
0)) as 端架执行网点数,
sum(floor_stack_sn) 地堆计划网点数,
sum(if(actual_floor_stack_executed is not null and actual_floor_stack_executed = '执行', 1,
0)) as 地堆执行网点数,
sum(other_display_sn) 其他陈列计划网点数,
sum(if(actual_other_display_executed is not null and actual_other_display_executed = '执行',
1, 0)) as 其他陈列执行网点数
from sales_ap_promotion_display
<where>
<include refid="deptZQQuery"/>
</where>
group by region_name, district_name) pd
on ar.region_name = pd.region_name and ar.district_name = pd.district_name
left join (select region_name,
district_name,
sum(actual_display_sn) 零食计划网点数,
sum(if(actual_display_sn = 1, if(snack_display_executed = '执行', 1, 0),
if(snack_display_executed = '执行', actual_end_cap_qty, 0))) 零食执行网点数
from sales_ap_snacks_display
<where>
<include refid="deptZQQuery"/>
</where>
group by region_name, district_name) sd
on ar.region_name = sd.region_name and ar.district_name = sd.district_name
left join (select region_name,
district_name,
sum(promotion_sn) 档期计划网点数,
sum(if(promotion_implementation_status = '是', 1, 0)) 档期开展网点数,
sum(if(spec_execution_status = '执行', 1, 0)) 促销规格执行网点数,
sum(if(flavor_execution_status = '执行', 1, 0)) 促销口味执行网点数,
sum(if(promotion_price_execution_status = '执行', 1, 0)) 促销价执行网点数,
sum(poster_sn) 海报计划网点数,
sum(if(poster_sn is null, null, if(poster_execution_status = '执行', 1, 0))) 海报执行网点数
from sales_ap_promotion
<where>
<include refid="deptZQQuery"/>
</where>
group by region_name, district_name) sp
on ar.region_name = sp.region_name and ar.district_name = sp.district_name
</select>
<sql id = "deptDQQuery">
<if test="salesMonth != null">
and sales_month = #{salesMonth}
</if>
<if test="deptNames != null">
and (region_name in
<foreach collection="deptNames" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
)
</if>
</sql>
<select id="queryDeptAPReportDQ" parameterType="com.sfa.operation.domain.sales.wq.SalesApWq" resultType="java.util.Map">
SELECT ar.region_name as regionName,
d.主货架计划网点数 as planMsStoreCnt,
d.主货架执行网点数 as execMsStoreCnt,
if(d.主货架计划网点数 is null, null,concat( round( coalesce(d.主货架执行网点数,0) / d.主货架计划网点数 *
100,2) ,'%')) as msExecRate,
d.常规端架计划网点数 as planRegEndcapStoreCnt,
d.常规端架执行网点数 as execRegEndcapStoreCnt,
if(d.常规端架计划网点数 is null, null,concat( round( coalesce(d.常规端架执行网点数,0) / d.常规端架计划网点数
* 100,2) ,'%')) as endcapExecRate,
d.常规地堆计划网点数 as planRegGsStoreCnt,
d.常规地堆执行网点数 as execRegGsStoreCnt,
if(d.常规地堆计划网点数 is null, null,concat( round( coalesce(d.常规地堆执行网点数,0) / d.常规地堆计划网点数
* 100,2) ,'%')) as gsExecRate,
d.多点陈列计划网点数 as planMpDispStoreCnt,
d.多点陈列执行网点数 as execMpDispStoreCnt,
if(d.多点陈列计划网点数 is null, null,concat( round( coalesce(d.多点陈列执行网点数,0) / d.多点陈列计划网点数
* 100,2) ,'%')) as mpDispExecRate,
d.挂条计划网点数 as planHsStoreCnt,
d.挂条执行网点数 as execHsStoreCnt,
if(d.挂条计划网点数 is null, null,concat( round( coalesce(d.挂条执行网点数,0) / d.挂条计划网点数 * 100,2)
,'%')) as HsExecRate,
s.三米两秒挂条计划网点数 as planSLStoreCnt,
s.三米两秒挂条执行网点数 as execSLStoreCnt,
if(s.三米两秒挂条计划网点数 is null, null,concat( round( coalesce(s.三米两秒挂条执行网点数,0) /
s.三米两秒挂条计划网点数 * 100,2) ,'%')) as SLExecRate,
j.批发挂网计划网点数 as planSixJdStoreCnt,
j.批发挂网执行网点数 as execSixJdStoreCnt,
if(j.批发挂网计划网点数 is null, null,concat( round( coalesce(j.批发挂网执行网点数,0) / j.批发挂网计划网点数
* 100,2) ,'%')) as sixJdExecRate,
pd.端架计划网点数 as planEndcapStoreCnt,
pd.端架执行网点数 as execEndcapStoreCnt,
if(pd.端架计划网点数 is null, null,concat( round( coalesce(pd.端架执行网点数,0) / pd.端架计划网点数 * 100,2)
,'%')) as endcapExecRatePromoPeriDisp,
pd.地堆计划网点数 as planGsStoreCnt,
pd.地堆执行网点数 as execGsStoreCnt,
if(pd.地堆计划网点数 is null, null,concat( round( coalesce(pd.地堆执行网点数,0) / pd.地堆计划网点数 * 100,2)
,'%')) as gsExecRatePromoPeriDisp,
pd.其他陈列计划网点数 as planOtherDispStoreCnt,
pd.其他陈列执行网点数 as execOtherDispStoreCnt,
if(pd.其他陈列计划网点数 is null, null,concat( round( coalesce(pd.其他陈列执行网点数,0) / pd.其他陈列计划网点数
* 100,2) ,'%')) as otherDispExecRatePromoPeriDisp,
sd.零食计划网点数 as planSnackStoreCnt,
sd.零食执行网点数 as execSnackStoreCnt,
if(sd.零食计划网点数 is null, null,concat( round( coalesce(sd.零食执行网点数,0) / sd.零食计划网点数 * 100,2)
,'%')) as snackExecRate,
sp.档期计划网点数 as planPromoPeriStoreCnt,
sp.档期开展网点数 as launchPromoPeriStoreCnt,
if(sp.档期计划网点数 is null, null,concat( round( coalesce(sp.档期开展网点数,0) / sp.档期计划网点数 * 100,2)
,'%')) as launchRatePromoPeriExec,
sp.促销规格执行网点数 as execPsStoreCnt,
if(sp.档期计划网点数 is null, null,concat( round( coalesce(sp.促销规格执行网点数,0) / sp.档期计划网点数 *
100,2) ,'%')) as psExecRatePromoPeriExec,
sp.促销口味执行网点数 as execPfStoreCnt,
if(sp.档期计划网点数 is null, null,concat( round( coalesce(sp.促销口味执行网点数,0) / sp.档期计划网点数 *
100,2) ,'%')) as pfExecRatePromoPeriExec,
sp.促销价执行网点数 as execPpStoreCnt,
if(sp.档期计划网点数 is null, null,concat( round( coalesce(sp.促销价执行网点数,0) / sp.档期计划网点数 *
100,2) ,'%')) as ppExecRatePromoPeriExec,
sp.海报计划网点数 as planPosterStoreCnt,
sp.海报执行网点数 as execPosterStoreCnt,
if(sp.海报计划网点数 is null, null,concat( round( coalesce(sp.海报执行网点数,0) / sp.海报计划网点数 * 100,2)
,'%')) as posterExecRate
FROM (
SELECT region_name
FROM sales_ap_display
<where>
<include refid="deptDQQuery"/>
</where>
UNION
SELECT region_name
FROM sales_ap_display_s
<where>
<include refid="deptDQQuery"/>
</where>
UNION
SELECT region_name
FROM sales_ap_display_j
<where>
<include refid="deptDQQuery"/>
</where>
UNION
SELECT region_name
FROM sales_ap_promotion_display
<where>
<include refid="deptDQQuery"/>
</where>
UNION
SELECT region_name
FROM sales_ap_snacks_display
<where>
<include refid="deptDQQuery"/>
</where>
UNION
SELECT region_name
FROM sales_ap_promotion
<where>
<include refid="deptDQQuery"/>
</where>
) AS ar
LEFT JOIN (select region_name,
sum(main_shelf_type_sn) as 主货架计划网点数,
sum(if(actual_main_shelf_executed is not null and actual_main_shelf_executed = '执行', 1,
0)) as 主货架执行网点数,
sum(end_cap_qty_sn) as 常规端架计划网点数,
sum(if(actual_end_cap_executed is not null and actual_end_cap_executed = '执行', 1,
0)) as 常规端架执行网点数,
sum(floor_stack_area_sn) as 常规地堆计划网点数,
sum(if(actual_floor_stack_executed is not null and actual_floor_stack_executed = '执行', 1,
0)) as 常规地堆执行网点数,
sum(multi_point_display_sn) as 多点陈列计划网点数,
sum(if(actual_multi_display_executed is not null and actual_multi_display_executed = '执行',
1,
0)) as 多点陈列执行网点数,
sum(hanging_strip_sn) as 挂条计划网点数,
sum(if(hanging_strip_executed is not null and hanging_strip_executed = '执行', 1,
0)) as 挂条执行网点数
from sales_ap_display
<where>
<include refid="deptDQQuery"/>
</where>
group by region_name) d
ON ar.region_name = d.region_name
LEFT JOIN (select region_name,
sum(display_sn60) 三米两秒挂条计划网点数,
sum(actual_display_qty60) 三米两秒挂条执行网点数
from sales_ap_display_s
<where>
<include refid="deptDQQuery"/>
</where>
group by region_name) s
ON ar.region_name = s.region_name
LEFT JOIN (select region_name,
sum(gw_sn6) 批发挂网计划网点数,
sum(actual_gw6) 批发挂网执行网点数
from sales_ap_display_j
<where>
<include refid="deptDQQuery"/>
</where>
group by region_name) j
ON ar.region_name = j.region_name
left join (select region_name,
sum(end_cap_sn) 端架计划网点数,
sum(if(actual_end_cap_executed is not null and actual_end_cap_executed = '执行', 1,
0)) as 端架执行网点数,
sum(floor_stack_sn) 地堆计划网点数,
sum(if(actual_floor_stack_executed is not null and actual_floor_stack_executed = '执行', 1,
0)) as 地堆执行网点数,
sum(other_display_sn) 其他陈列计划网点数,
sum(if(actual_other_display_executed is not null and actual_other_display_executed = '执行',
1, 0)) as 其他陈列执行网点数
from sales_ap_promotion_display
<where>
<include refid="deptDQQuery"/>
</where>
group by region_name) pd
on ar.region_name = pd.region_name
left join (select region_name,
sum(actual_display_sn) 零食计划网点数,
sum(if(actual_display_sn = 1, if(snack_display_executed = '执行', 1, 0),
if(snack_display_executed = '执行', actual_end_cap_qty, 0))) 零食执行网点数
from sales_ap_snacks_display
<where>
<include refid="deptDQQuery"/>
</where>
group by region_name) sd
on ar.region_name = sd.region_name
left join (select region_name,
sum(promotion_sn) 档期计划网点数,
sum(if(promotion_implementation_status = '是', 1, 0)) 档期开展网点数,
sum(if(spec_execution_status = '执行', 1, 0)) 促销规格执行网点数,
sum(if(flavor_execution_status = '执行', 1, 0)) 促销口味执行网点数,
sum(if(promotion_price_execution_status = '执行', 1, 0)) 促销价执行网点数,
sum(poster_sn) 海报计划网点数,
sum(if(poster_sn is null, null, if(poster_execution_status = '执行', 1, 0))) 海报执行网点数
from sales_ap_promotion
<where>
<include refid="deptDQQuery"/>
</where>
group by region_name) sp
on ar.region_name = sp.region_name
</select>
</mapper> </mapper>
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论