|
@@ -1,7 +1,9 @@
|
|
package org.jeecg.modules.ctop.service.impl;
|
|
package org.jeecg.modules.ctop.service.impl;
|
|
|
|
|
|
|
|
+import cn.com.ctop.common.module.entity.UserAllocation;
|
|
import cn.com.ctop.common.module.utils.CtopAdConstant;
|
|
import cn.com.ctop.common.module.utils.CtopAdConstant;
|
|
import cn.com.ctop.performanceappraisal.service.IPerformanceService;
|
|
import cn.com.ctop.performanceappraisal.service.IPerformanceService;
|
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
import org.jeecg.common.util.DateUtils;
|
|
import org.jeecg.common.util.DateUtils;
|
|
import org.jeecg.modules.ctop.entity.Advertiser;
|
|
import org.jeecg.modules.ctop.entity.Advertiser;
|
|
import org.jeecg.modules.ctop.entity.SalePerformanceDetail;
|
|
import org.jeecg.modules.ctop.entity.SalePerformanceDetail;
|
|
@@ -23,6 +25,7 @@ import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
@Service
|
|
@Service
|
|
|
|
+@Slf4j
|
|
public class PerformanceSaleServiceImpl implements IPerformanceSaleService {
|
|
public class PerformanceSaleServiceImpl implements IPerformanceSaleService {
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
@@ -55,60 +58,68 @@ public class PerformanceSaleServiceImpl implements IPerformanceSaleService {
|
|
|
|
|
|
public void countPerformance(SysUser user) {
|
|
public void countPerformance(SysUser user) {
|
|
// Date getDate = DateUtils.addDay(new Date(), -1)
|
|
// Date getDate = DateUtils.addDay(new Date(), -1)
|
|
- Date getDate = DateUtils.addDay(new Date(), -15);
|
|
|
|
|
|
+ log.info("销售人员名称:{}", user.getRealname());
|
|
|
|
+ Date getDate = DateUtils.addDay(new Date(), -18);
|
|
String startDateStr = DateUtils.getQuarterStartDate(getDate);
|
|
String startDateStr = DateUtils.getQuarterStartDate(getDate);
|
|
String endDateStr = DateUtils.getQuarterEndDate(getDate);
|
|
String endDateStr = DateUtils.getQuarterEndDate(getDate);
|
|
//获取用户角色信息
|
|
//获取用户角色信息
|
|
SysUserRole userRole = userRoleService.getUserRoleByUserId(user.getId());
|
|
SysUserRole userRole = userRoleService.getUserRoleByUserId(user.getId());
|
|
- //1:获取快手季度总消耗
|
|
|
|
- BigDecimal kuaishouFinishMediaTask = performanceService.getKuaishouSeasonTotalCost(startDateStr, endDateStr);
|
|
|
|
|
|
+ //1:获取快手季度总消耗 TODO 后续需要改成动态获取
|
|
|
|
+ BigDecimal kuaishouFinishMediaTask = CtopAdConstant.KUAISHOU_MEDIA_TASK_COST;
|
|
//2:获取快手个人季度总消耗
|
|
//2:获取快手个人季度总消耗
|
|
- BigDecimal kuaishouFinishPersonnalTask = performanceService.getKuaishouSalesSeasonTotalCostByParams(startDateStr, endDateStr, user.getId(), null);
|
|
|
|
- //1:获取头条季度总消耗
|
|
|
|
- BigDecimal bytedanceFinishMediaTask = performanceService.getBytedanceSeasonTotalCost(startDateStr, endDateStr);
|
|
|
|
|
|
+ BigDecimal kuaishouFinishPersonnalTask = performanceService.getKuaishouSalesSeasonTotalCostByParams(startDateStr, endDateStr, user.getId(), null, null);
|
|
|
|
+ //1:获取头条季度总消耗 TODO 后续需要改成动态获取
|
|
|
|
+ BigDecimal bytedanceFinishMediaTask = CtopAdConstant.BYTEDANCE_MEDIA_TASK_COST;
|
|
//2:获取头条个人季度总消耗
|
|
//2:获取头条个人季度总消耗
|
|
- BigDecimal bytedanceFinishPersonnalTask = performanceService.getBytedanceSalesSeasonTotalCostByParams(startDateStr, endDateStr, user.getId(), null);
|
|
|
|
|
|
+ BigDecimal bytedanceFinishPersonnalTask = performanceService.getBytedanceSalesSeasonTotalCostByParams(startDateStr, endDateStr, user.getId(), null, null);
|
|
//获取销售所属的广告主信息
|
|
//获取销售所属的广告主信息
|
|
List<Advertiser> advertiserList = advertiserService.getBySaleId(user.getId());
|
|
List<Advertiser> advertiserList = advertiserService.getBySaleId(user.getId());
|
|
-
|
|
|
|
|
|
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
+ Date startSeasonDate = null;
|
|
|
|
+ Date endSeasonDate = null;
|
|
|
|
+ try {
|
|
|
|
+ startSeasonDate = dateFormat.parse(startDateStr);
|
|
|
|
+ endSeasonDate = dateFormat.parse(endDateStr);
|
|
|
|
+ } catch (ParseException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ }
|
|
if (null != advertiserList && advertiserList.size() > 0) {
|
|
if (null != advertiserList && advertiserList.size() > 0) {
|
|
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
|
- Date startSeasonDate = null;
|
|
|
|
- Date endSeasonDate = null;
|
|
|
|
- try {
|
|
|
|
- startSeasonDate = dateFormat.parse(startDateStr);
|
|
|
|
- endSeasonDate = dateFormat.parse(endDateStr);
|
|
|
|
- } catch (ParseException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
for (Advertiser advertiser : advertiserList) {
|
|
for (Advertiser advertiser : advertiserList) {
|
|
- Date endOldDate = DateUtils.addDay(advertiser.getCreateTime(), 90);
|
|
|
|
- if (startSeasonDate.after(endOldDate)) {
|
|
|
|
- //季度开始时间大于新户结束时间(全部按照老户逻辑计算)
|
|
|
|
- saveSalePerformanceDetail(advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
|
- startDateStr, endDateStr, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
|
- kuaishouFinishPersonnalTask, 0);
|
|
|
|
- } else if (endOldDate.after(endSeasonDate)) {
|
|
|
|
- saveSalePerformanceDetail(advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
|
- startDateStr, endDateStr, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
|
- kuaishouFinishPersonnalTask, 1);
|
|
|
|
- } else {
|
|
|
|
- //新户结束时间处于本季度中间
|
|
|
|
- String endduring1Date = DateUtils.formatDate(endOldDate);
|
|
|
|
- saveSalePerformanceDetail(advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
|
- startDateStr, endduring1Date, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
|
- kuaishouFinishPersonnalTask, 1);
|
|
|
|
- saveSalePerformanceDetail(advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
|
- endduring1Date, endDateStr, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
|
- kuaishouFinishPersonnalTask, 0);
|
|
|
|
|
|
+ //1:根据广告主查询用户绑定信息
|
|
|
|
+ List<UserAllocation> allocations = advertiserService.getAllocationsByAdvertiserId(advertiser.getId());
|
|
|
|
+ if (null != allocations && allocations.size() > 0) {
|
|
|
|
+ Date finalStartSeasonDate = startSeasonDate;
|
|
|
|
+ Date finalEndSeasonDate = endSeasonDate;
|
|
|
|
+ allocations.forEach(allocation -> {
|
|
|
|
+ Date endOldDate = DateUtils.addDay(allocation.getCreateTime(), 90);
|
|
|
|
+ if (finalStartSeasonDate.after(endOldDate)) {
|
|
|
|
+ //季度开始时间大于新户结束时间(全部按照老户逻辑计算)
|
|
|
|
+ saveSalePerformanceDetail(allocation, advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
|
+ startDateStr, endDateStr, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
|
+ kuaishouFinishPersonnalTask, 0);
|
|
|
|
+ } else if (endOldDate.after(finalEndSeasonDate)) {
|
|
|
|
+ saveSalePerformanceDetail(allocation, advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
|
+ startDateStr, endDateStr, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
|
+ kuaishouFinishPersonnalTask, 1);
|
|
|
|
+ } else {
|
|
|
|
+ //新户结束时间处于本季度中间
|
|
|
|
+ String endduring1Date = DateUtils.formatDate(endOldDate);
|
|
|
|
+ saveSalePerformanceDetail(allocation, advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
|
+ startDateStr, endduring1Date, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
|
+ kuaishouFinishPersonnalTask, 1);
|
|
|
|
+ saveSalePerformanceDetail(allocation, advertiser, user, userRole, DateUtils.getYear(getDate), DateUtils.getQuarter(getDate),
|
|
|
|
+ endduring1Date, endDateStr, bytedanceFinishMediaTask, bytedanceFinishPersonnalTask, kuaishouFinishMediaTask,
|
|
|
|
+ kuaishouFinishPersonnalTask, 0);
|
|
|
|
+ }
|
|
|
|
+ });
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- private void saveSalePerformanceDetail(Advertiser advertiser, SysUser user, SysUserRole userRole, int year, int quarter, String startDate, String endDate, BigDecimal bytedanceFinishMediaTask, BigDecimal bytedanceFinishPersonnalTask, BigDecimal kuaishouFinishMediaTask, BigDecimal kuaishouFinishPersonnalTask, Integer brandNew) {
|
|
|
|
|
|
+ private void saveSalePerformanceDetail(UserAllocation allocation, Advertiser advertiser, SysUser user, SysUserRole userRole, int year, int quarter, String startDate, String endDate, BigDecimal bytedanceFinishMediaTask, BigDecimal bytedanceFinishPersonnalTask, BigDecimal kuaishouFinishMediaTask, BigDecimal kuaishouFinishPersonnalTask, Integer brandNew) {
|
|
SalePerformanceDetail detail = new SalePerformanceDetail();
|
|
SalePerformanceDetail detail = new SalePerformanceDetail();
|
|
|
|
+ detail.setAccountId(allocation.getAccountId());
|
|
detail.setAdvertiserId(advertiser.getId());
|
|
detail.setAdvertiserId(advertiser.getId());
|
|
detail.setSaleId(user.getId());
|
|
detail.setSaleId(user.getId());
|
|
detail.setRoleId(userRole.getRoleId());
|
|
detail.setRoleId(userRole.getRoleId());
|
|
@@ -120,7 +131,7 @@ public class PerformanceSaleServiceImpl implements IPerformanceSaleService {
|
|
detail.setBrandNew(brandNew);
|
|
detail.setBrandNew(brandNew);
|
|
if (user.getOrgCode().startsWith(CtopAdConstant.HB_BYTEDANCE_SALE_ORG_CODE)) {
|
|
if (user.getOrgCode().startsWith(CtopAdConstant.HB_BYTEDANCE_SALE_ORG_CODE)) {
|
|
detail.setMediaType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
|
|
detail.setMediaType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
|
|
- BigDecimal totalCost = performanceService.getSalesSeasonTotalCostByParams(startDate, endDate, null, advertiser.getId(), CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
|
|
|
|
|
|
+ BigDecimal totalCost = performanceService.getSalesSeasonTotalCostByParams(startDate, endDate, null, null, allocation.getAccountId(), CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
|
|
if (null == totalCost) {
|
|
if (null == totalCost) {
|
|
totalCost = BigDecimal.ZERO;
|
|
totalCost = BigDecimal.ZERO;
|
|
}
|
|
}
|
|
@@ -134,7 +145,7 @@ public class PerformanceSaleServiceImpl implements IPerformanceSaleService {
|
|
salePerformanceDetailService.save(detail);
|
|
salePerformanceDetailService.save(detail);
|
|
} else if (user.getOrgCode().startsWith(CtopAdConstant.HB_KUAISHOU_SALE_ORG_CODE)) {
|
|
} else if (user.getOrgCode().startsWith(CtopAdConstant.HB_KUAISHOU_SALE_ORG_CODE)) {
|
|
detail.setMediaType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
|
|
detail.setMediaType(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
|
|
- BigDecimal totalCost = performanceService.getSalesSeasonTotalCostByParams(startDate, endDate, null, advertiser.getId(), CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
|
|
|
|
|
|
+ BigDecimal totalCost = performanceService.getSalesSeasonTotalCostByParams(startDate, endDate, null, null, allocation.getAccountId(), CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
|
|
if (null == totalCost) {
|
|
if (null == totalCost) {
|
|
totalCost = BigDecimal.ZERO;
|
|
totalCost = BigDecimal.ZERO;
|
|
}
|
|
}
|