| @@ -52,7 +52,7 @@ public class WxLegionActivityOrder extends TenantEntity { | |||
| * 订单金额 | |||
| */ | |||
| @io.swagger.annotations.ApiModelProperty(value="订单金额",name="orderMoney") | |||
| @Excel(name = "订单金额", width = 20, orderNum = "12") | |||
| @Excel(name = "订单金额", width = 20, orderNum = "13") | |||
| @TableField(value = "order_money") | |||
| private BigDecimal orderMoney; | |||
| @@ -110,6 +110,9 @@ public class WxLegionActivityOrder extends TenantEntity { | |||
| private String merchantName; | |||
| @TableField(exist = false) | |||
| private List<Long> merchantIdList; | |||
| @Excel(name = "商铺号", width = 20, orderNum = "8") | |||
| @TableField(exist = false) | |||
| private String merchantShopNum; | |||
| /** | |||
| * 军团ID | |||
| @@ -117,7 +120,7 @@ public class WxLegionActivityOrder extends TenantEntity { | |||
| @io.swagger.annotations.ApiModelProperty(value="军团ID",name="legionId") | |||
| @TableField(value = "legion_id") | |||
| private Long legionId; | |||
| @Excel(name = "所属军团", width = 20, orderNum = "8") | |||
| @Excel(name = "所属军团", width = 20, orderNum = "9") | |||
| @TableField(exist = false) | |||
| private String legionName; | |||
| @@ -130,14 +133,14 @@ public class WxLegionActivityOrder extends TenantEntity { | |||
| @io.swagger.annotations.ApiModelProperty(value="联盟id",name="unionId") | |||
| @TableField(value = "union_id") | |||
| private Long unionId; | |||
| @Excel(name = "所属联盟", width = 20, orderNum = "9") | |||
| @Excel(name = "所属联盟", width = 20, orderNum = "10") | |||
| @TableField(exist = false) | |||
| private String unionName; | |||
| // /** | |||
| // * 卡属派系 | |||
| // */ | |||
| // @Excel(name = "所属派系", width = 20, orderNum = "10", replace = {"原联盟_1", "非联盟_2"}) | |||
| // @Excel(name = "所属派系", width = 20, orderNum = "11", replace = {"原联盟_1", "非联盟_2"}) | |||
| // @TableField(exist = false) | |||
| // private Integer unionType; | |||
| @@ -151,7 +154,7 @@ public class WxLegionActivityOrder extends TenantEntity { | |||
| * 0:签单, 1:外部军团带单1, 2:内部军团不同联盟带单, 3:内部军团相同联盟带单, 4:内部军团无联盟带单 | |||
| */ | |||
| @io.swagger.annotations.ApiModelProperty(value="带单类型 0:签单, 1:外部军团带单1, 2:内部军团不同联盟带单, 3:内部军团相同联盟带单, 4:内部军团无联盟带单",name="orderType") | |||
| @Excel(name = "带单类型", width = 20, orderNum = "13", replace = {"签单_0", "外部军团带单_1", "内部军团不同联盟带单_2", "内部军团相同联盟带单_3", "内部军团无联盟带单_4"}) | |||
| @Excel(name = "带单类型", width = 20, orderNum = "14", replace = {"签单_0", "外部军团带单_1", "内部军团不同联盟带单_2", "内部军团相同联盟带单_3", "内部军团无联盟带单_4"}) | |||
| @TableField(value = "order_type") | |||
| private Integer orderType; | |||
| @TableField(exist = false) | |||
| @@ -194,7 +197,7 @@ public class WxLegionActivityOrder extends TenantEntity { | |||
| * 0:审核中, 1:已审批, 2:已驳回, 3:已失效 | |||
| */ | |||
| @io.swagger.annotations.ApiModelProperty(value="审批状态 0:审核中, 1:已审批, 2:已驳回, 3:已失效",name="auditStatus") | |||
| @Excel(name = "审核状态", width = 20, orderNum = "11", replace = {"审核中_0", "已审批_1", "已驳回_2", "已失效_3"}) | |||
| @Excel(name = "审核状态", width = 20, orderNum = "12", replace = {"审核中_0", "已审批_1", "已驳回_2", "已失效_3"}) | |||
| @TableField(value = "audit_status") | |||
| private Integer auditStatus; | |||
| @@ -210,7 +213,7 @@ public class WxLegionActivityOrder extends TenantEntity { | |||
| * 审核时间 | |||
| */ | |||
| @io.swagger.annotations.ApiModelProperty(value="审核时间",name="auditTime") | |||
| @Excel(name = "审核时间", format = "yyyy-MM-dd HH:mm:ss", width = 20, orderNum = "14") | |||
| @Excel(name = "审核时间", format = "yyyy-MM-dd HH:mm:ss", width = 20, orderNum = "15") | |||
| @TableField(value = "audit_time") | |||
| private Date auditTime; | |||
| @@ -223,6 +226,7 @@ public class WxLegionActivityOrder extends TenantEntity { | |||
| /** | |||
| * 抽奖券编码 | |||
| */ | |||
| @Excel(name = "抽奖券编码", width = 20, orderNum = "8") | |||
| @TableField(exist = false) | |||
| private String lotteryNum; | |||
| @TableField(exist = false) | |||
| @@ -241,6 +245,7 @@ public class WxLegionActivityOrder extends TenantEntity { | |||
| /** | |||
| * 抽奖券数量 | |||
| */ | |||
| @Excel(name = "抽奖券数量", width = 20, orderNum = "8") | |||
| @TableField(exist = false) | |||
| private Integer lotteryCount; | |||
| @@ -105,6 +105,9 @@ public class WxVtwoActivityOrder extends TenantEntity { | |||
| @TableField(value = "from_order_id") | |||
| private Long fromOrderId; | |||
| @TableField(exist = false) | |||
| private List<Long> fromOrderIds; | |||
| /** | |||
| * 订单号 | |||
| */ | |||
| @@ -214,7 +217,7 @@ public class WxVtwoActivityOrder extends TenantEntity { | |||
| /** | |||
| * 审核时间 | |||
| */ | |||
| @Excel(name = "提交时间", format = "yyyy-MM-dd HH:mm:ss", width = 20, orderNum = "13") | |||
| @Excel(name = "审核时间", format = "yyyy-MM-dd HH:mm:ss", width = 20, orderNum = "13") | |||
| @TableField(value = "audit_time") | |||
| private Date auditTime; | |||
| @@ -59,4 +59,6 @@ public interface WxVtwoActivityOrderService extends IService<WxVtwoActivityOrder | |||
| List<WxVtwoOrderCountStatistics> orderCountStatisticsChart(WxVtwoActivityStatisticsVo statisticsVo); | |||
| List<WxVtwoOrderBusinessStatistics> orderBusinessStatistics(WxVtwoActivityStatisticsVo statisticsVo); | |||
| Map<Long, WxVtwoActivityOrder> findFromMap(WxVtwoActivityOrder record); | |||
| } | |||
| @@ -77,6 +77,9 @@ public class WxLegionActivityOrderServiceImpl implements WxLegionActivityOrderSe | |||
| @Autowired | |||
| private WxLegionActivityConfigMapper wxLegionActivityConfigMapper; | |||
| @Autowired | |||
| private WxVtwoActivityOrderService wxVtwoActivityOrderService; | |||
| @Override | |||
| public PageInfo<WxLegionActivityOrder> listAsPage(WxLegionActivityOrder wxLegionActivityOrder, Integer pageNum, Integer pageSize) { | |||
| handlerQuery(wxLegionActivityOrder); | |||
| @@ -124,17 +127,26 @@ public class WxLegionActivityOrderServiceImpl implements WxLegionActivityOrderSe | |||
| if (wxLegionActivityOrders == null || wxLegionActivityOrders.isEmpty()) { | |||
| return; | |||
| } | |||
| List<Long> ids = wxLegionActivityOrders.stream().map(WxLegionActivityOrder::getId).collect(Collectors.toList()); | |||
| List<Long> merchantIds = wxLegionActivityOrders.stream().map(WxLegionActivityOrder::getMerchantId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); | |||
| List<Long> adminUserIds = wxLegionActivityOrders.stream().map(WxLegionActivityOrder::getAuditBy).filter(Objects::nonNull).distinct().collect(Collectors.toList()); | |||
| List<Long> userIds = wxLegionActivityOrders.stream().map(WxLegionActivityOrder::getCusId).filter(Objects::nonNull).distinct().collect(Collectors.toList()); | |||
| Map<Long, WxMerchant> merchantMap = new HashMap<>(); | |||
| Map<Long,String> merchantShopNumberMap = new HashMap<>(); | |||
| if(!merchantIds.isEmpty()){ | |||
| WxMerchant merchantQ = new WxMerchant(); | |||
| merchantQ.updateTenantInfo(wxLegionActivityOrder); | |||
| merchantQ.setIds(merchantIds); | |||
| merchantMap = wxMerchantService.findMerchantMap(merchantQ); | |||
| merchantShopNumberMap = wxShopService.getMerchantShopNumberMap(wxLegionActivityOrder, merchantIds, EnumYesOrNo.NO.getCode()); | |||
| } | |||
| Map<Long,WxVtwoActivityOrder> vtwoActivityOrderMap = new HashMap<>(); | |||
| if(!ids.isEmpty()){ | |||
| WxVtwoActivityOrder vtwoActivityOrderQ = new WxVtwoActivityOrder(); | |||
| vtwoActivityOrderQ.updateTenantInfo(wxLegionActivityOrder); | |||
| vtwoActivityOrderQ.setFromOrderIds(ids); | |||
| vtwoActivityOrderMap = wxVtwoActivityOrderService.findFromMap(vtwoActivityOrderQ); | |||
| } | |||
| Map<Long, MallUserInfo> userMap = new HashMap<>(); | |||
| if(!adminUserIds.isEmpty()){ | |||
| @@ -155,9 +167,17 @@ public class WxLegionActivityOrderServiceImpl implements WxLegionActivityOrderSe | |||
| Map<Long, String> legionConfigMap = wxLegionActivityConfigService.getLegionConfigMap(legionConfigQ); | |||
| for (WxLegionActivityOrder legionActivityOrder : wxLegionActivityOrders) { | |||
| WxVtwoActivityOrder vtwoActivityOrder = vtwoActivityOrderMap.get(legionActivityOrder.getId()); | |||
| if(vtwoActivityOrder != null){ | |||
| legionActivityOrder.setLotteryNum(vtwoActivityOrder.getLotteryNum()); | |||
| legionActivityOrder.setLotteryCount(vtwoActivityOrder.getLotteryCount()); | |||
| legionActivityOrder.setAnniversaryLotteryNum(vtwoActivityOrder.getAnniversaryLotteryNum()); | |||
| } | |||
| if(legionActivityOrder.getMerchantId() != null){ | |||
| WxMerchant merchant = merchantMap.get(legionActivityOrder.getMerchantId()); | |||
| legionActivityOrder.setMerchantName(merchant.getName()); | |||
| legionActivityOrder.setMerchantShopNum(merchantShopNumberMap.get(legionActivityOrder.getMerchantId())); | |||
| } | |||
| if(legionActivityOrder.getAuditBy() != null){ | |||
| legionActivityOrder.setAuditByName(userMap.get(legionActivityOrder.getAuditBy()).getName()); | |||
| @@ -115,17 +115,24 @@ public class WxVtwoActivityGrantSettlementServiceImpl extends ServiceImpl<WxVtwo | |||
| private void handleOrderRatio(List<WxVtwoActivityOrder> orderList){ | |||
| BigDecimal orderSumMoney = orderList.stream().map(WxVtwoActivityOrder::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); | |||
| int size = orderList.size() - 1; | |||
| BigDecimal lastRatio = new BigDecimal(100); | |||
| for(int i=0; i<size; i++){ | |||
| WxVtwoActivityOrder order = orderList.get(i); | |||
| for (WxVtwoActivityOrder order : orderList){ | |||
| BigDecimal orderRatio = order.getOrderMoney() | |||
| .divide(orderSumMoney,4, RoundingMode.HALF_UP) | |||
| .divide(orderSumMoney,6, RoundingMode.HALF_UP) | |||
| .multiply(new BigDecimal(100)); | |||
| order.setOrderRatio(orderRatio); | |||
| lastRatio = lastRatio.subtract(orderRatio); | |||
| } | |||
| orderList.get(size).setOrderRatio(lastRatio); | |||
| // int size = orderList.size() - 1; | |||
| // BigDecimal lastRatio = new BigDecimal(100); | |||
| // for(int i=0; i<size; i++){ | |||
| // WxVtwoActivityOrder order = orderList.get(i); | |||
| // BigDecimal orderRatio = order.getOrderMoney() | |||
| // .divide(orderSumMoney,4, RoundingMode.HALF_UP) | |||
| // .multiply(new BigDecimal(100)); | |||
| // order.setOrderRatio(orderRatio); | |||
| // lastRatio = lastRatio.subtract(orderRatio); | |||
| // } | |||
| // orderList.get(size).setOrderRatio(lastRatio); | |||
| } | |||
| @@ -173,8 +173,12 @@ public class WxVtwoActivityOrderServiceImpl extends ServiceImpl<WxVtwoActivityOr | |||
| if(activityOrder.getAuditStatus() == null){ | |||
| activityOrder.setAuditStatus(EnumOfflineActivityRecordStatus.AUDTING.getCode()); | |||
| } | |||
| activityOrder.setCreateDate(now); | |||
| activityOrder.setUpdateDate(now); | |||
| if(activityOrder.getCreateDate() == null){ | |||
| activityOrder.setCreateDate(now); | |||
| } | |||
| if (activityOrder.getUpdateDate() == null){ | |||
| activityOrder.setUpdateDate(now); | |||
| } | |||
| wxVtwoActivityOrderMapper.insert(activityOrder); | |||
| } | |||
| else{ | |||
| @@ -500,6 +504,15 @@ public class WxVtwoActivityOrderServiceImpl extends ServiceImpl<WxVtwoActivityOr | |||
| return Collections.emptyList(); | |||
| } | |||
| @Override | |||
| public Map<Long, WxVtwoActivityOrder> findFromMap(WxVtwoActivityOrder record) { | |||
| List<WxVtwoActivityOrder> list = wxVtwoActivityOrderMapper.findList(record); | |||
| if(list != null && !list.isEmpty()){ | |||
| return list.stream().collect(Collectors.toMap(WxVtwoActivityOrder::getFromOrderId, Function.identity())); | |||
| } | |||
| return Collections.emptyMap(); | |||
| } | |||
| } | |||
| @@ -59,7 +59,7 @@ public class WxVtwoCashBackGrantAwardServiceImpl extends ServiceImpl<WxVtwoCashB | |||
| && cashBackAward.getCashBackLimit().compareTo(cashBackPrice) < 0 ){ | |||
| cashBackPrice = cashBackAward.getCashBackLimit(); | |||
| } | |||
| cashBackPrice = awardsRulePrice(cashBackPrice,cashBackActivity.getCashBackRule()); | |||
| cashBackPrice = awardsRulePrice(cashBackPrice,EnumOfflineActivityAwardsRule.DEF.getCode()); | |||
| if(cashBackPrice.compareTo(BigDecimal.ZERO) > 0){ | |||
| cashBackTotal = cashBackTotal.add(cashBackPrice); | |||
| WxVtwoCashBackGrantAward grantAward = new WxVtwoCashBackGrantAward(); | |||
| @@ -86,7 +86,7 @@ public class WxVtwoCashBackGrantAwardServiceImpl extends ServiceImpl<WxVtwoCashB | |||
| } | |||
| if(cashBackAward != null && cashBackAward.getCashBackRatio() != null){ | |||
| BigDecimal cashBackPrice = orderMoneySum.multiply(cashBackAward.getCashBackRatio().divide(new BigDecimal(100))); | |||
| cashBackPrice = awardsRulePrice(cashBackPrice,cashBackActivity.getCashBackRule()); | |||
| cashBackPrice = awardsRulePrice(cashBackPrice,EnumOfflineActivityAwardsRule.DEF.getCode()); | |||
| if(cashBackPrice.compareTo(BigDecimal.ZERO) > 0){ | |||
| cashBackTotal = cashBackTotal.add(cashBackPrice); | |||
| @@ -110,7 +110,7 @@ public class WxVtwoCashBackGrantAwardServiceImpl extends ServiceImpl<WxVtwoCashB | |||
| if(cashBackAward != null && cashBackAward.getCashBackRatio() != null){ | |||
| BigDecimal orderMoneySum = orderList.stream().map(WxVtwoActivityOrder::getOrderMoney).reduce(BigDecimal.ZERO, BigDecimal::add); | |||
| BigDecimal cashBackPrice = orderMoneySum.multiply(cashBackAward.getCashBackRatio().divide(new BigDecimal(100))); | |||
| cashBackPrice = awardsRulePrice(cashBackPrice,cashBackActivity.getCashBackRule()); | |||
| cashBackPrice = awardsRulePrice(cashBackPrice,EnumOfflineActivityAwardsRule.DEF.getCode()); | |||
| if(cashBackPrice.compareTo(BigDecimal.ZERO) > 0){ | |||
| cashBackTotal = cashBackTotal.add(cashBackPrice); | |||
| @@ -126,20 +126,34 @@ public class WxVtwoCashBackGrantAwardServiceImpl extends ServiceImpl<WxVtwoCashB | |||
| } | |||
| } | |||
| //计算返现金额最大限制 | |||
| BigDecimal prop = BigDecimal.ONE; | |||
| //返现总金额 | |||
| cashBackTotal = awardsRulePrice(cashBackTotal,cashBackActivity.getCashBackRule()); | |||
| if(cashBackTotal.compareTo(cashBackActivity.getCashBackLimit()) >= 0){ | |||
| prop = cashBackActivity.getCashBackLimit().divide(cashBackTotal,4, RoundingMode.HALF_UP); | |||
| } | |||
| if(prop.compareTo(BigDecimal.ONE) < 0){ | |||
| cashBackTotal = awardsRulePrice(cashBackActivity.getCashBackLimit(),cashBackActivity.getCashBackRule()); | |||
| //按返现金额进行分摊 | |||
| BigDecimal sumCashBack = grantAwardList.stream().map(WxVtwoCashBackGrantAward::getCashBack).reduce(BigDecimal.ZERO, BigDecimal::add); | |||
| for (WxVtwoCashBackGrantAward grantAward:grantAwardList){ | |||
| grantAward.setCashBack(awardsRulePrice(grantAward.getCashBack().multiply(prop),cashBackActivity.getCashBackRule())); | |||
| BigDecimal cashBackRatio = grantAward.getCashBack() | |||
| .divide(sumCashBack,6, RoundingMode.HALF_UP); | |||
| grantAward.setCashBack(awardsRulePrice(cashBackTotal.multiply(cashBackRatio),EnumOfflineActivityAwardsRule.DEF.getCode())); | |||
| } | |||
| } | |||
| BigDecimal realCashBackTotal = grantAwardList.stream().map(WxVtwoCashBackGrantAward::getCashBack).reduce(BigDecimal.ZERO, BigDecimal::add); | |||
| // BigDecimal prop = BigDecimal.ONE; | |||
| // if(cashBackTotal.compareTo(cashBackActivity.getCashBackLimit()) >= 0){ | |||
| // prop = cashBackActivity.getCashBackLimit().divide(cashBackTotal,6, RoundingMode.HALF_UP); | |||
| // } | |||
| // | |||
| // if(prop.compareTo(BigDecimal.ONE) < 0){ | |||
| // for (WxVtwoCashBackGrantAward grantAward:grantAwardList){ | |||
| // grantAward.setCashBack(awardsRulePrice(grantAward.getCashBack().multiply(prop),cashBackActivity.getCashBackRule())); | |||
| // } | |||
| // } | |||
| // BigDecimal realCashBackTotal = grantAwardList.stream().map(WxVtwoCashBackGrantAward::getCashBack).reduce(BigDecimal.ZERO, BigDecimal::add); | |||
| activityGrant.setCashBackLimit(cashBackActivity.getCashBackLimit()); | |||
| activityGrant.setCashBack(realCashBackTotal); | |||
| activityGrant.setCashBack(cashBackTotal); | |||
| if(EnumOfflineActivityMode.ONE.getCode().equals(cashBackActivity.getAmountModel())){ | |||
| //单独算税点 | |||
| @@ -166,10 +180,16 @@ public class WxVtwoCashBackGrantAwardServiceImpl extends ServiceImpl<WxVtwoCashB | |||
| .divide(new BigDecimal(100)).setScale(2, RoundingMode.HALF_UP)); | |||
| } | |||
| //税点分摊到发奖上面 | |||
| BigDecimal sumCashBack = grantAwardList.stream().map(WxVtwoCashBackGrantAward::getCashBack).reduce(BigDecimal.ZERO, BigDecimal::add); | |||
| for (WxVtwoCashBackGrantAward grantAward:grantAwardList){ | |||
| BigDecimal taxAmountProp = grantAward.getCashBack().divide(activityGrant.getCashBack(),4,RoundingMode.HALF_UP);; | |||
| grantAward.setTaxAmount(activityGrant.getTaxAmount().multiply(taxAmountProp).setScale(2, RoundingMode.HALF_UP)); | |||
| BigDecimal cashBackRatio = grantAward.getCashBack() | |||
| .divide(sumCashBack,6, RoundingMode.HALF_UP); | |||
| grantAward.setTaxAmount(activityGrant.getTaxAmount().multiply(cashBackRatio).setScale(2, RoundingMode.HALF_UP)); | |||
| } | |||
| // for (WxVtwoCashBackGrantAward grantAward:grantAwardList){ | |||
| // BigDecimal taxAmountProp = grantAward.getCashBack().divide(activityGrant.getCashBack(),4,RoundingMode.HALF_UP);; | |||
| // grantAward.setTaxAmount(activityGrant.getTaxAmount().multiply(taxAmountProp).setScale(2, RoundingMode.HALF_UP)); | |||
| // } | |||
| } | |||
| activityGrant.setGrantAwardList(grantAwardList); | |||
| @@ -94,6 +94,13 @@ | |||
| and `audit_status` = #{auditStatus} | |||
| </if> | |||
| <if test=" null != fromOrderIds "> | |||
| and from_order_id in | |||
| <foreach collection="fromOrderIds" index="index" item="foidItem" open="(" separator="," close=")"> | |||
| #{foidItem} | |||
| </foreach> | |||
| </if> | |||
| <if test=" null != merchantIdList "> | |||
| and merchant_id in | |||
| <foreach collection="merchantIdList" index="index" item="midItem" open="(" separator="," close=")"> | |||