Commit da05561a by yinyong

数据中心--亚马逊根据平台sku+站点拆分金额

parent 2f3ce08d
package com.bailuntec.domain.dto;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
@Data
public class DcBaseFinanceAmazonItemDto {
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.id
*
* @mbg.generated
*/
private Integer id;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.campaign_name
*
* @mbg.generated
*/
private String campaignName;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.campaign_id
*
* @mbg.generated
*/
private String campaignId;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.ad_group_name
*
* @mbg.generated
*/
private String adGroupName;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.ad_group_id
*
* @mbg.generated
*/
private String adGroupId;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.cost
*
* @mbg.generated
*/
private BigDecimal cost;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.currency
*
* @mbg.generated
*/
private String currency;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.asin
*
* @mbg.generated
*/
private String asin;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.sku
*
* @mbg.generated
*/
private String sku;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.account_id
*
* @mbg.generated
*/
private Integer accountId;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.company_id
*
* @mbg.generated
*/
private Integer companyId;
private LocalDate reportDate;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.exchange_rate
*
* @mbg.generated
*/
private BigDecimal exchangeRate;
/**
*
* This field was generated by MyBatis Generator.
* This field corresponds to the database column dc_base_finance_amazon_ad_product.exchange_rate_usd
*
* @mbg.generated
*/
private BigDecimal exchangeRateUsd;
private String siteEn;
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_ad_product
*
* @mbg.generated
*/
private List<DcBaseSkuMappingItemDto> dcBaseSkuMappingList;
}
\ No newline at end of file
......@@ -84,6 +84,7 @@ public class DcBaseSkuMappingItemDto {
private Integer count;
private String itemId;
/**
*
......
package com.bailuntec.mapper;
import com.bailuntec.domain.dto.DcBaseFinanceAmazonItemDto;
import com.bailuntec.domain.entity.DcBaseFinanceAmazonAdProduct;
import com.bailuntec.domain.entity.JobPointLog;
import com.bailuntec.domain.example.DcBaseFinanceAmazonAdProductExample;
import org.apache.ibatis.annotations.Param;
......@@ -121,4 +123,6 @@ public interface DcBaseFinanceAmazonAdProductMapper {
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
int upsertSelective(DcBaseFinanceAmazonAdProduct record);
List<DcBaseFinanceAmazonItemDto> selectAmazonItem(JobPointLog jobPointLog);
}
\ No newline at end of file
......@@ -1409,4 +1409,38 @@
</if>
limit 1
</select>
<resultMap id="BaseResultMap1" type="com.bailuntec.domain.dto.DcBaseFinanceAmazonItemDto">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
-->
<id column="id" jdbcType="INTEGER" property="id" />
<result column="campaign_name" jdbcType="VARCHAR" property="campaignName" />
<result column="campaign_id" jdbcType="VARCHAR" property="campaignId" />
<result column="ad_group_name" jdbcType="VARCHAR" property="adGroupName" />
<result column="ad_group_id" jdbcType="VARCHAR" property="adGroupId" />
<result column="cost" jdbcType="DECIMAL" property="cost" />
<result column="currency" jdbcType="VARCHAR" property="currency" />
<result column="asin" jdbcType="VARCHAR" property="asin" />
<result column="sku" jdbcType="VARCHAR" property="sku" />
<result column="account_id" jdbcType="INTEGER" property="accountId" />
<result column="company_id" jdbcType="INTEGER" property="companyId" />
<result column="report_date" jdbcType="DATE" property="reportDate" />
<result column="exchange_rate" jdbcType="DECIMAL" property="exchangeRate" />
<result column="exchange_rate_usd" jdbcType="DECIMAL" property="exchangeRateUsd" />
<result column="site_en" jdbcType="VARCHAR" property="siteEn"/>
<collection property="dcBaseSkuMappingList" column="{sku=sku,siteEn=site_en}" ofType="com.bailuntec.domain.dto.DcBaseSkuMappingItemDto" select="selectSkuMapping">
</collection>
</resultMap>
<select id="selectSkuMapping" resultType="com.bailuntec.domain.dto.DcBaseSkuMappingItemDto">
select dc0.*, dc1.unit_price from dc_base_sku_mapping dc0 left join dc_base_sku dc1 on dc0.bailun_sku = dc1.bailun_sku where dc0.platform_sku = #{sku} and dc0.site = #{siteEn} and dc0.has_deleted = 0
</select>
<select id="selectAmazonItem" resultMap="BaseResultMap1">
select dc0.*, dc1.site_en from dc_base_finance_amazon_ad_product dc0
left join dc_base_company_account dc1 on dc0.account_id = dc1.account_id and dc1.company_id = 1
where report_date &gt;= #{startTime} and report_date &lt; #{endTime}
order by id asc
limit ${pageIndex * pageSize} , #{pageSize}
</select>
</mapper>
\ No newline at end of file
package com.bailuntec.mapper;
import com.bailuntec.domain.entity.DcBaseFinanceAmazonItem;
import com.bailuntec.domain.example.DcBaseFinanceAmazonItemExample;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface DcBaseFinanceAmazonItemMapper {
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
*/
long countByExample(DcBaseFinanceAmazonItemExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
*/
int deleteByExample(DcBaseFinanceAmazonItemExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
*/
int deleteByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
*/
int insert(DcBaseFinanceAmazonItem record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
*/
int insertSelective(DcBaseFinanceAmazonItem record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
DcBaseFinanceAmazonItem selectOneByExample(DcBaseFinanceAmazonItemExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
*/
List<DcBaseFinanceAmazonItem> selectByExample(DcBaseFinanceAmazonItemExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
*/
DcBaseFinanceAmazonItem selectByPrimaryKey(Integer id);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
*/
int updateByExampleSelective(@Param("record") DcBaseFinanceAmazonItem record, @Param("example") DcBaseFinanceAmazonItemExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
*/
int updateByExample(@Param("record") DcBaseFinanceAmazonItem record, @Param("example") DcBaseFinanceAmazonItemExample example);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
*/
int updateByPrimaryKeySelective(DcBaseFinanceAmazonItem record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
*/
int updateByPrimaryKey(DcBaseFinanceAmazonItem record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
int upsert(DcBaseFinanceAmazonItem record);
/**
* This method was generated by MyBatis Generator.
* This method corresponds to the database table dc_base_finance_amazon_item
*
* @mbg.generated
* @project https://github.com/itfsw/mybatis-generator-plugin
*/
int upsertSelective(DcBaseFinanceAmazonItem record);
}
\ No newline at end of file
package com.bailuntec.job;
import com.bailuntec.domain.dto.DcBaseFinanceAmazonItemDto;
import com.bailuntec.domain.dto.DcBaseSkuMappingItemDto;
import com.bailuntec.domain.entity.*;
import com.bailuntec.domain.example.DcBaseFinanceAmazonAdProductExample;
import com.bailuntec.domain.example.DcBaseFinanceAmazonExample;
import com.bailuntec.mapper.DcBaseFinanceAmazonAdProductMapper;
import com.bailuntec.mapper.DcBaseFinanceAmazonItemMapper;
import com.bailuntec.mapper.DcBaseFinanceAmazonMapper;
import com.bailuntec.support.PointJob;
import com.bailuntec.utils.SessionUtil;
import com.dangdang.ddframe.job.api.ShardingContext;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.beanutils.BeanUtils;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
@Slf4j
......@@ -17,14 +25,97 @@ public class CalculateAmazonItemJob extends PointJob {
public void executeJob(ShardingContext shardingContext, JobPointLog jobPointLog) {
long countAmazon;
try{
DcBaseFinanceAmazonMapper dcBaseFinanceAmazonMapper = SessionUtil.getSession().getMapper(DcBaseFinanceAmazonMapper.class);
List<DcBaseFinanceAmazon> countAmazons = dcBaseFinanceAmazonMapper.selectByExample(DcBaseFinanceAmazonExample.newAndCreateCriteria().andReportDateBetween(jobPointLog.getStartTime().toLocalDate(), jobPointLog.getEndTime().toLocalDate()).example());
DcBaseFinanceAmazonAdProductMapper dcBaseFinanceAmazonAdProductMapper = SessionUtil.getSession().getMapper(DcBaseFinanceAmazonAdProductMapper.class);
countAmazon = dcBaseFinanceAmazonAdProductMapper.countByExample(DcBaseFinanceAmazonAdProductExample.newAndCreateCriteria().andReportDateGreaterThanOrEqualTo(jobPointLog.getStartTime().toLocalDate()).andReportDateLessThan(jobPointLog.getEndTime().toLocalDate()).example());
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException("MYBATIS操作DB失败", e);
}finally {
SessionUtil.closeSession();
}
long totalPage = getTotalPage(countAmazon, jobPointLog);
do{
List<DcBaseFinanceAmazonItemDto> dcBaseFinanceAmazonItemDtoList;
try{
DcBaseFinanceAmazonAdProductMapper dcBaseFinanceAmazonAdProductMapper = SessionUtil.getSession().getMapper(DcBaseFinanceAmazonAdProductMapper.class);
dcBaseFinanceAmazonItemDtoList = dcBaseFinanceAmazonAdProductMapper.selectAmazonItem(jobPointLog);
for(DcBaseFinanceAmazonItemDto dcBaseFinanceAmazonItemDto : dcBaseFinanceAmazonItemDtoList) {
if(dcBaseFinanceAmazonItemDto.getDcBaseSkuMappingList() != null && dcBaseFinanceAmazonItemDto.getDcBaseSkuMappingList().size() > 0) {
BigDecimal totalUnitPrice = getTotalUnitPrice(dcBaseFinanceAmazonItemDto.getDcBaseSkuMappingList());
for(DcBaseSkuMappingItemDto dcBaseSkuMappingItemDto : dcBaseFinanceAmazonItemDto.getDcBaseSkuMappingList()) {
DcBaseFinanceAmazonItem dcBaseFinanceAmazonItem = new DcBaseFinanceAmazonItem();
BeanUtils.copyProperties(dcBaseFinanceAmazonItem, dcBaseSkuMappingItemDto);
BigDecimal unitPrice = dcBaseSkuMappingItemDto.getUnitPrice() == null ? BigDecimal.ZERO : dcBaseSkuMappingItemDto.getUnitPrice();
BigDecimal unitPriceRadio;
if(totalUnitPrice.compareTo(BigDecimal.ZERO) == 0) {
unitPriceRadio = BigDecimal.ONE.divide(BigDecimal.valueOf(dcBaseFinanceAmazonItemDto.getDcBaseSkuMappingList().size()), 3, RoundingMode.HALF_EVEN);
}else {
unitPriceRadio = unitPrice.multiply(BigDecimal.valueOf(dcBaseSkuMappingItemDto.getCount())).divide(totalUnitPrice, 3, RoundingMode.HALF_EVEN);
}
dcBaseFinanceAmazonItem.setSkuRatio(unitPriceRadio);
dcBaseFinanceAmazonItem.setSku(dcBaseFinanceAmazonItemDto.getSku());
dcBaseFinanceAmazonItem.setAccountId(dcBaseFinanceAmazonItemDto.getAccountId());
dcBaseFinanceAmazonItem.setAdGroupId(dcBaseFinanceAmazonItemDto.getAdGroupId());
dcBaseFinanceAmazonItem.setAmazonId(dcBaseFinanceAmazonItemDto.getId());
dcBaseFinanceAmazonItem.setAsin(dcBaseFinanceAmazonItemDto.getAsin());
dcBaseFinanceAmazonItem.setBailunSku(dcBaseSkuMappingItemDto.getBailunSku());
dcBaseFinanceAmazonItem.setCampaignId(dcBaseFinanceAmazonItemDto.getCampaignId());
dcBaseFinanceAmazonItem.setCompanyId(dcBaseFinanceAmazonItemDto.getCompanyId());
dcBaseFinanceAmazonItem.setCost(dcBaseFinanceAmazonItemDto.getCost());
dcBaseFinanceAmazonItem.setCurrency(dcBaseFinanceAmazonItemDto.getCurrency());
dcBaseFinanceAmazonItem.setExchangeRate(dcBaseFinanceAmazonItemDto.getExchangeRate());
dcBaseFinanceAmazonItem.setExchangeRateUsd(dcBaseFinanceAmazonItemDto.getExchangeRateUsd());
dcBaseFinanceAmazonItem.setItemId(dcBaseSkuMappingItemDto.getItemId());
dcBaseFinanceAmazonItem.setReportDate(dcBaseFinanceAmazonItemDto.getReportDate());
dcBaseFinanceAmazonItem.setSkuCost(dcBaseFinanceAmazonItemDto.getCost().multiply(unitPriceRadio));
dcBaseFinanceAmazonItem.setSite(dcBaseFinanceAmazonItemDto.getSiteEn());
if(dcBaseFinanceAmazonItem.getBailunSku() == null) {
dcBaseFinanceAmazonItem.setBailunSku("无");
}
if(dcBaseFinanceAmazonItem.getItemId() == null) {
dcBaseFinanceAmazonItem.setItemId("无");
}
DcBaseFinanceAmazonItemMapper dcBaseFinanceAmazonItemMapper = SessionUtil.getSession().getMapper(DcBaseFinanceAmazonItemMapper.class);
dcBaseFinanceAmazonItemMapper.insertSelective(dcBaseFinanceAmazonItem);
}
}else {
DcBaseFinanceAmazonItem dcBaseFinanceAmazonItem = new DcBaseFinanceAmazonItem();
BeanUtils.copyProperties(dcBaseFinanceAmazonItem, dcBaseFinanceAmazonItemDto);
dcBaseFinanceAmazonItem.setAmazonId(dcBaseFinanceAmazonItemDto.getId());
dcBaseFinanceAmazonItem.setSite(dcBaseFinanceAmazonItemDto.getSiteEn());
dcBaseFinanceAmazonItem.setId(null);
dcBaseFinanceAmazonItem.setSkuCost(dcBaseFinanceAmazonItem.getCost());
dcBaseFinanceAmazonItem.setSkuRatio(BigDecimal.ONE);
DcBaseFinanceAmazonItemMapper dcBaseFinanceAmazonItemMapper = SessionUtil.getSession().getMapper(DcBaseFinanceAmazonItemMapper.class);
dcBaseFinanceAmazonItemMapper.insertSelective(dcBaseFinanceAmazonItem);
}
}
}catch (Exception e){
e.printStackTrace();
throw new RuntimeException("MYBATIS操作DB失败", e);
}finally {
SessionUtil.closeSession();
}
jobPointLog.setPageIndex(jobPointLog.getPageIndex() + 1);
}while (jobPointLog.getPageIndex() <= totalPage);
}
private long getTotalPage(long countAmazon, JobPointLog jobPointLog) {
if (countAmazon % jobPointLog.getPageSize() == 0) {
return countAmazon / jobPointLog.getPageSize();
}
return countAmazon / jobPointLog.getPageSize() + 1;
}
BigDecimal getTotalUnitPrice(List<DcBaseSkuMappingItemDto> dcBaseSkuMappingList) {
BigDecimal totalUnitPrice = BigDecimal.ZERO;
for(DcBaseSkuMappingItemDto dcBaseSkuMappingItemDto : dcBaseSkuMappingList) {
BigDecimal unitPrice = dcBaseSkuMappingItemDto.getUnitPrice() == null ? BigDecimal.ZERO : dcBaseSkuMappingItemDto.getUnitPrice();
totalUnitPrice = totalUnitPrice.add(unitPrice.multiply(BigDecimal.valueOf(dcBaseSkuMappingItemDto.getCount())));
}
return totalUnitPrice;
}
}
......@@ -83,6 +83,7 @@ public class CalculateEbayItemJob extends PointJob {
dcBaseFinanceEbayItem.setGmtDate(dcBaseFinanceEbayItemDto.getGmtDate());
dcBaseFinanceEbayItem.setItemId(dcBaseFinanceEbayItemDto.getItemId());
dcBaseFinanceEbayItem.setEbayId(dcBaseFinanceEbayItemDto.getId());
dcBaseFinanceEbayItem.setCurrency(dcBaseFinanceEbayItemDto.getCurrency());
dcBaseFinanceEbayItem.setExchangeRate(dcBaseFinanceEbayItemDto.getExchangeRate());
dcBaseFinanceEbayItem.setExchangeRateUsd(dcBaseFinanceEbayItemDto.getExchangeRateUsd());
DcBaseFinanceEbayItemMapper dcBaseFinanceEbayItemMapper = SessionUtil.getSession().getMapper(DcBaseFinanceEbayItemMapper.class);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment