yangdamao 2 vuotta sitten
vanhempi
commit
c897223cdc
17 muutettua tiedostoa jossa 413 lisäystä ja 66 poistoa
  1. 0 8
      zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxPayController.java
  2. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/domain/DistributionCashLog.java
  3. 57 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/domain/DistributionRebate.java
  4. 13 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/mapper/DistributionRebateMapper.java
  5. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/service/IDistributionRebateService.java
  6. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/service/impl/DistributionActivityServiceImpl.java
  7. 20 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/service/impl/DistributionRebateServiceImpl.java
  8. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/vo/DistributionActivityPosterVo.java
  9. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/vo/DistributionActivityVo.java
  10. 4 3
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderGoodsAddBo.java
  11. 9 6
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoods.java
  12. 65 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java
  13. 50 6
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  14. 2 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/distribution/service/impl/DistributionActivityTemplateServiceImpl.java
  15. 1 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/top/distribution/vo/DistributionActivityTenantVo.java
  16. 150 39
      zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java
  17. 7 0
      zhongzheng-system/src/main/resources/mapper/modules/distribution/DistributionRebateMapper.xml

+ 0 - 8
zhongzheng-api/src/main/java/com/zhongzheng/controller/wx/WxPayController.java

@@ -1,15 +1,10 @@
 package com.zhongzheng.controller.wx;
 
 import com.github.xiaoymin.knife4j.annotations.ApiSupport;
-import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.domain.AjaxResult;
-import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.framework.web.service.WxLoginService;
 import com.zhongzheng.framework.web.service.WxTokenService;
-import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import com.zhongzheng.modules.user.service.IUserService;
-import com.zhongzheng.modules.user.vo.UserVo;
-import com.zhongzheng.modules.wx.bo.WxLoginBody;
 import com.zhongzheng.modules.wx.bo.WxPayBody;
 import com.zhongzheng.modules.wx.service.IWxPayService;
 import io.swagger.annotations.Api;
@@ -17,9 +12,6 @@ import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.HashMap;
-import java.util.Map;
-
 @Api(tags ="微信支付操作管理")
 @ApiSupport(order = 2)
 @RestController

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/domain/DistributionCashLog.java

@@ -33,7 +33,7 @@ private static final long serialVersionUID=1L;
     /** 现金额 */
     private BigDecimal newNum;
     /** 1冻结金额  2可提现金额 3已提现金额 */
-    private Long type;
+    private Integer type;
     /** 变化金额 */
     private BigDecimal diffNum;
     /** 关联订单编号,提现编号 */

+ 57 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/domain/DistributionRebate.java

@@ -0,0 +1,57 @@
+package com.zhongzheng.modules.distribution.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 【请填写功能名称】对象 distribution_activity_goods
+ *
+ * @author ruoyi
+ * @date 2023-03-06
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("distribution_rebate")
+public class DistributionRebate implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** 主键 */
+    @TableId(value = "id")
+    private Long id;
+    /** 分销活动编码 */
+    private String distributionCode;
+    /** 业务员ID */
+    private Long sellerId;
+    /** 业务员等级 */
+    private Integer sellerLevel;
+    /** 佣金 */
+    private BigDecimal cash;
+    /** 订单商品ID */
+    private Long orderGoodsId;
+    /** 佣金类型 */
+    private Integer profitType;
+    /** 佣金比例 */
+    private BigDecimal profit;
+    /** 状态:1有效,0无效 */
+    private Integer status;
+    /** 添加时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 修改时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 机构ID */
+    private Long tenantId;
+    /** 备注 */
+    private String remark;
+}

+ 13 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/mapper/DistributionRebateMapper.java

@@ -0,0 +1,13 @@
+package com.zhongzheng.modules.distribution.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.distribution.domain.DistributionRebate;
+
+/**
+ * 【请填写功能名称】Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-03-06
+ */
+public interface DistributionRebateMapper extends BaseMapper<DistributionRebate> {
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/service/IDistributionRebateService.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.distribution.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.distribution.domain.DistributionRebate;
+
+/**
+ * 【请填写功能名称】Service接口
+ *
+ * @author ruoyi
+ * @date 2023-03-06
+ */
+public interface IDistributionRebateService extends IService<DistributionRebate> {
+
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/service/impl/DistributionActivityServiceImpl.java

@@ -172,6 +172,13 @@ public class DistributionActivityServiceImpl extends ServiceImpl<DistributionAct
             List<DistributionActivityGoods> collect = bo.getGoodsList().stream().map(item -> {
                 DistributionActivityGoods entity = BeanUtil.toBean(item, DistributionActivityGoods.class);
                 entity.setDistributionId(add.getDistributionId());
+                if (ObjectUtils.isNotNull(item.getProfitType()) && item.getProfitType() == 1){
+                    //佣金是百分比
+                    entity.setProfitMax(item.getProfitMax().divide(new BigDecimal(100)));
+                    entity.setProfitOne(item.getProfitOne().divide(new BigDecimal(100)));
+                    entity.setProfitTwo(item.getProfitTwo().divide(new BigDecimal(100)));
+                    entity.setProfitThree(item.getProfitThree().divide(new BigDecimal(100)));
+                }
                 entity.setCreateTime(DateUtils.getNowTime());
                 entity.setUpdateTime(DateUtils.getNowTime());
                 return entity;
@@ -225,6 +232,13 @@ public class DistributionActivityServiceImpl extends ServiceImpl<DistributionAct
             List<DistributionActivityGoods> collect = bo.getGoodsList().stream().map(item -> {
                 DistributionActivityGoods entity = BeanUtil.toBean(item, DistributionActivityGoods.class);
                 entity.setDistributionId(update.getDistributionId());
+                if (ObjectUtils.isNotNull(item.getProfitType()) && item.getProfitType() == 1){
+                    //佣金是百分比
+                    entity.setProfitMax(item.getProfitMax().divide(new BigDecimal(100)));
+                    entity.setProfitOne(item.getProfitOne().divide(new BigDecimal(100)));
+                    entity.setProfitTwo(item.getProfitTwo().divide(new BigDecimal(100)));
+                    entity.setProfitThree(item.getProfitThree().divide(new BigDecimal(100)));
+                }
                 entity.setCreateTime(DateUtils.getNowTime());
                 entity.setUpdateTime(DateUtils.getNowTime());
                 return entity;

+ 20 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/service/impl/DistributionRebateServiceImpl.java

@@ -0,0 +1,20 @@
+package com.zhongzheng.modules.distribution.service.impl;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhongzheng.modules.distribution.domain.DistributionRebate;
+import com.zhongzheng.modules.distribution.mapper.DistributionRebateMapper;
+import com.zhongzheng.modules.distribution.service.IDistributionRebateService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 【请填写功能名称】Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-03-06
+ */
+@Service
+@DS("slave")
+public class DistributionRebateServiceImpl extends ServiceImpl<DistributionRebateMapper, DistributionRebate> implements IDistributionRebateService {
+
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/vo/DistributionActivityPosterVo.java

@@ -38,6 +38,8 @@ public class DistributionActivityPosterVo {
 	/** 备注 */
 	@ApiModelProperty("备注")
 	private String remark;
+	@ApiModelProperty("创建时间")
+	private Long createTime;
 
 	@ApiModelProperty("业务员海报base64")
 	private String posterImg;

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/distribution/vo/DistributionActivityVo.java

@@ -67,6 +67,10 @@ public class DistributionActivityVo {
 	/** 创建人 */
 	@ApiModelProperty("创建人")
 	private String createBy;
+
+	@ApiModelProperty("创建时间")
+	private Long createTime;
+
 	@ApiModelProperty("活动商品集合")
 	private List<DistributionActivityGoodsVo> goodsList;
 

+ 4 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/bo/OrderGoodsAddBo.java

@@ -2,10 +2,7 @@ package com.zhongzheng.modules.order.bo;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
-import java.util.Date;
-
 
 import java.math.BigDecimal;
 
@@ -86,4 +83,8 @@ public class OrderGoodsAddBo {
     /** 关闭原因 */
     @ApiModelProperty("关闭原因")
     private String closeReason;
+    @ApiModelProperty("分销码")
+    private String distributionCode;
+    @ApiModelProperty("分销链编码")
+    private String distributionLinkCode;
 }

+ 9 - 6
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/OrderGoods.java

@@ -1,16 +1,15 @@
 package com.zhongzheng.modules.order.domain;
 
-import com.baomidou.mybatisplus.annotation.*;
-import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
+
 import java.io.Serializable;
-import java.util.Date;
 import java.math.BigDecimal;
-import java.util.List;
-
-import com.zhongzheng.common.annotation.Excel;
 
 /**
  * 订单商品对象 order_goods
@@ -84,4 +83,8 @@ private static final long serialVersionUID=1L;
     private Long serviceEndTime;
     /** 关闭原因 */
     private String closeReason;
+    /** 分销编码 */
+    private String distributionCode;
+    /** 分销链编码 */
+    private String distributionLinkCode;
 }

+ 65 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java

@@ -24,6 +24,14 @@ import com.zhongzheng.modules.activity.domain.ActivityOrder;
 import com.zhongzheng.modules.activity.service.IActivityOrderService;
 import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.service.ICourseBusinessService;
+import com.zhongzheng.modules.distribution.domain.DistributionActivity;
+import com.zhongzheng.modules.distribution.domain.DistributionCashLog;
+import com.zhongzheng.modules.distribution.domain.DistributionRebate;
+import com.zhongzheng.modules.distribution.domain.DistributionSeller;
+import com.zhongzheng.modules.distribution.service.IDistributionActivityService;
+import com.zhongzheng.modules.distribution.service.IDistributionCashLogService;
+import com.zhongzheng.modules.distribution.service.IDistributionRebateService;
+import com.zhongzheng.modules.distribution.service.IDistributionSellerService;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
@@ -109,6 +117,14 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
     private ISysUserService iSysUserService;
     @Autowired
     private IClassGradeService iClassGradeService;
+    @Autowired
+    private IDistributionActivityService iDistributionActivityService;
+    @Autowired
+    private IDistributionCashLogService iDistributionCashLogService;
+    @Autowired
+    private IDistributionSellerService iDistributionSellerService;
+    @Autowired
+    private IDistributionRebateService iDistributionRebateService;
     @Value("${oldStudySys.shareCanclePath}")
     private String SHARE_CANCLE_PATH;
 
@@ -193,6 +209,18 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
         if(order.getOrderFrom()!=2&&order.getOrderFrom()!=3){
             throw new CustomException("不支持非客户端订单退款");
         }
+        //是否分销订单退款
+        if (StringUtils.isNotBlank(orderGoods.getDistributionCode())){
+            DistributionActivity dailyActivity = iDistributionActivityService
+                    .getOne(new LambdaQueryWrapper<DistributionActivity>()
+                            .eq(DistributionActivity::getCode, orderGoods.getDistributionCode()));
+            //佣金冻结天数
+            Integer freezingPeriod = dailyActivity.getFreezingPeriod();
+            Long time = freezingPeriod * 86400L + orderGoods.getCreateTime();
+            if (DateUtils.getNowTime() > time){
+                throw new CustomException(String.format("活动商品已超过退款期限【%s天】,无法退款",freezingPeriod));
+            }
+        }
         //订单商品
         Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId,bo.getGoodsId()));
         if(goods.getGoodsType()==1){
@@ -631,6 +659,10 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
                     if("OK".equals(payResult.get("return_msg"))&&Validator.isNotEmpty(payResult.get("refund_id"))){
                         OrderGoods orderGoods = iOrderGoodsService.getById(bo.getOrderGoodsId());
                         Goods goods = iGoodsService.getById(bo.getGoodsId());
+                        if (StringUtils.isNotBlank(orderGoods.getDistributionCode())){
+                            //处理分销订单
+                            distributionRefund(orderGoods);
+                        }
                         refundCall(payResult.get("refund_id"),bo.getRefundId(),orderGoods.getOrderGoodsId(),order,goods.getGoodsType(),orderGoods.getGradeId(),bo.getUserId(),goods.getGoodsId());
                         //关闭C端用户的分销返利
                         shareClientCancelOldSys(order,orderGoods,bo.getRealRefundFee());
@@ -658,6 +690,39 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
         return true;
     }
 
+    private void distributionRefund(OrderGoods orderGoods) {
+        List<DistributionCashLog> cashLogList = iDistributionCashLogService
+                .list(new LambdaQueryWrapper<DistributionCashLog>()
+                .eq(DistributionCashLog::getRelatedSn, orderGoods.getOrderSn())
+                .eq(DistributionCashLog::getStatus, 1));
+        if (CollectionUtils.isEmpty(cashLogList)){
+            return;
+        }
+        cashLogList.forEach(item -> {
+            DistributionRebate rebate = iDistributionRebateService
+                    .getOne(new LambdaQueryWrapper<DistributionRebate>()
+                    .eq(DistributionRebate::getSellerId, item.getSellerId())
+                    .eq(DistributionRebate::getStatus, 1)
+                    .eq(DistributionRebate::getOrderGoodsId, orderGoods.getOrderGoodsId())
+                    .last("limit 1"));
+            if (ObjectUtils.isNull(rebate)){
+                return;
+            }
+            BigDecimal cash = rebate.getCash().setScale(2,BigDecimal.ROUND_HALF_UP);
+            DistributionSeller seller = iDistributionSellerService.getById(item.getSellerId());
+            BigDecimal freezeCash = seller.getFreezeCash().subtract(cash).setScale(2,BigDecimal.ROUND_HALF_UP);
+            item.setOldNum(seller.getFreezeCash());
+            item.setNewNum(freezeCash);
+            item.setDiffNum(new BigDecimal(String.format("-%s",cash)));
+            item.setRemark(item.getRemark()+","+String.format("退款商品【】退款利润【】",orderGoods.getGoodsId(),cash));
+            item.setUpdateTime(DateUtils.getNowTime());
+            seller.setFreezeCash(freezeCash);
+            seller.setUpdateTime(DateUtils.getNowTime());
+            iDistributionSellerService.updateById(seller);
+        });
+        iDistributionCashLogService.updateBatchById(cashLogList);
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Boolean firstPeriod(List<OrderGoodsRefundEditBo> bos) {

+ 50 - 6
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -18,7 +18,9 @@ import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.modules.activity.domain.ActivityGoodsPrice;
 import com.zhongzheng.modules.activity.domain.ActivityOrder;
+import com.zhongzheng.modules.activity.service.IActivityGoodsPriceService;
 import com.zhongzheng.modules.activity.service.IActivityOrderService;
 import com.zhongzheng.modules.base.bo.ConsoleQueryBo;
 import com.zhongzheng.modules.base.service.IProfileTpService;
@@ -32,6 +34,9 @@ import com.zhongzheng.modules.course.service.ICourseMenuService;
 import com.zhongzheng.modules.course.service.ICourseSubjectService;
 import com.zhongzheng.modules.course.vo.CourseBusinessVo;
 import com.zhongzheng.modules.course.vo.CourseModuleFreeExamVo;
+import com.zhongzheng.modules.distribution.domain.DistributionActivity;
+import com.zhongzheng.modules.distribution.service.IDistributionActivityGoodsService;
+import com.zhongzheng.modules.distribution.service.IDistributionActivityService;
 import com.zhongzheng.modules.goods.bo.GoodsAttachedAddBo;
 import com.zhongzheng.modules.goods.bo.GoodsBankAddBo;
 import com.zhongzheng.modules.goods.bo.GoodsFreeBankAddBo;
@@ -155,6 +160,15 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     @Autowired
     private IActivityOrderService iActivityOrderService;
 
+    @Autowired
+    private IDistributionActivityService iDistributionActivityService;
+
+    @Autowired
+    private IDistributionActivityGoodsService iDistributionActivityGoodsService;
+
+    @Autowired
+    private IActivityGoodsPriceService iActivityGoodsPriceService;
+
 
     @Override
     public OrderVo queryById(Long orderId) {
@@ -786,14 +800,44 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             orderGoods.setCompany(bo.getOrderStudent().getCompany());*/
             //成交价
             orderGoods.setStatus(1);
-            orderGoods.setGoodsRealPrice(goods.getStandPrice());
-            orderGoods.setGoodsPrice(goods.getStandPrice());
             orderGoods.setCreateTime(DateUtils.getNowTime());
             orderGoods.setUpdateTime(DateUtils.getNowTime());
-            //订单价格不计算优惠
-            totalPrice = totalPrice.add(goods.getStandPrice());
-            //暂不计算优惠券
-            payPrice = payPrice.add(goods.getStandPrice());
+            if (StringUtils.isNotBlank(g.getDistributionCode())){
+                //分销订单
+                DistributionActivity activity = iDistributionActivityService
+                        .getOne(new LambdaQueryWrapper<DistributionActivity>()
+                        .eq(DistributionActivity::getCode, g.getDistributionCode())
+                        .eq(DistributionActivity::getStatus, 1));
+                if (ObjectUtils.isNull(activity)){
+                    throw new CustomException(String.format("分销订单创建失败【%s】",g.getDistributionCode()));
+                }
+                if (DateUtils.getNowTime() < activity.getStartTime() || DateUtils.getNowTime() > activity.getEndTime()){
+                    throw new CustomException(String.format("分销活动已结束【%s】",g.getDistributionCode()));
+                }
+                //活动价格
+                ActivityGoodsPrice goodsPrice = iActivityGoodsPriceService
+                        .getOne(new LambdaQueryWrapper<ActivityGoodsPrice>()
+                        .eq(ActivityGoodsPrice::getGoodsId, g.getGoodsId())
+                        .eq(ActivityGoodsPrice::getActivityCode, activity.getCode()));
+                if (ObjectUtils.isNull(goodsPrice)){
+                    throw new CustomException(String.format("分销活动价格拉取失败【%s】",g.getDistributionCode()));
+                }
+                orderGoods.setDistributionCode(activity.getCode());
+                orderGoods.setDistributionLinkCode(g.getDistributionLinkCode());
+                orderGoods.setGoodsRealPrice(goodsPrice.getGoodsPrice());
+                orderGoods.setGoodsPrice(goodsPrice.getGoodsPrice());
+                //订单价格不计算优惠
+                totalPrice = totalPrice.add(goodsPrice.getGoodsPrice());
+                //暂不计算优惠券
+                payPrice = payPrice.add(goodsPrice.getGoodsPrice());
+            }else {
+                orderGoods.setGoodsRealPrice(goods.getStandPrice());
+                orderGoods.setGoodsPrice(goods.getStandPrice());
+                //订单价格不计算优惠
+                totalPrice = totalPrice.add(goods.getStandPrice());
+                //暂不计算优惠券
+                payPrice = payPrice.add(goods.getStandPrice());
+            }
             boolean orderGoodsRs = iOrderGoodsService.save(orderGoods);
 
             boolean canRepeatBuy = false;

+ 2 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/distribution/service/impl/DistributionActivityTemplateServiceImpl.java

@@ -131,7 +131,7 @@ public class DistributionActivityTemplateServiceImpl extends ServiceImpl<Distrib
                 List<DistributionActivityTenantVo> activityTenantVos = relationList.stream().map(item -> {
                     SysTenant tenant = iSysTenantService.getById(item.getTenantId());
                     DistributionActivityTenantVo tenantVo = new DistributionActivityTenantVo();
-                    tenantVo.setTenantId(tenant.getTenantId());
+                    tenantVo.setTenantId(tenant.getTenantId().toString());
                     tenantVo.setTenantName(tenant.getTenantName());
                     tenantVo.setAddress(tenant.getAddress());
                     tenantVo.setStatus(tenant.getStatus());
@@ -251,7 +251,7 @@ public class DistributionActivityTemplateServiceImpl extends ServiceImpl<Distrib
             List<DistributionActivityTemplateRelation> entitys = bo.getTenantList().stream().map(tenant -> {
                 DistributionActivityTemplateRelation entity = new DistributionActivityTemplateRelation();
                 entity.setDistributionTempId(tempId);
-                entity.setTenantId(tenant.getTenantId());
+                entity.setTenantId(Long.valueOf(tenant.getTenantId()));
                 entity.setCreateTime(DateUtils.getNowTime());
                 entity.setUpdateTime(DateUtils.getNowTime());
                 return entity;

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/distribution/vo/DistributionActivityTenantVo.java

@@ -13,7 +13,7 @@ import java.io.Serializable;
 public class DistributionActivityTenantVo implements Serializable {
 
     @ApiModelProperty("机构ID")
-    private Long tenantId;
+    private String tenantId;
 
     @ApiModelProperty("机构名称")
     private String tenantName;

+ 150 - 39
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java

@@ -1,21 +1,12 @@
 package com.zhongzheng.modules.wx.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.convert.Convert;
 import cn.hutool.core.lang.Validator;
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.http.HttpStatus;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.github.pagehelper.Page;
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
@@ -23,15 +14,19 @@ import com.google.zxing.qrcode.QRCodeWriter;
 import com.zhongzheng.common.config.WxSmallConfig;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
-import com.zhongzheng.common.utils.*;
+import com.zhongzheng.common.utils.AES;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
 import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.common.utils.ip.IpUtils;
-import com.zhongzheng.common.utils.polyv.PolyvUtils;
-import com.zhongzheng.common.utils.wxpay.*;
+import com.zhongzheng.common.utils.wxpay.WXPay;
+import com.zhongzheng.common.utils.wxpay.WXPayConstants;
+import com.zhongzheng.common.utils.wxpay.WXPayRequest;
+import com.zhongzheng.common.utils.wxpay.WXPayUtil;
 import com.zhongzheng.modules.activity.domain.ActivityOrder;
+import com.zhongzheng.modules.activity.service.IActivityGoodsPriceService;
 import com.zhongzheng.modules.activity.service.IActivityOrderService;
-import com.zhongzheng.modules.base.service.IShoppingCartService;
-import com.zhongzheng.modules.course.domain.Course;
 import com.zhongzheng.modules.course.domain.CourseBusiness;
 import com.zhongzheng.modules.course.domain.CourseEducationType;
 import com.zhongzheng.modules.course.domain.CourseProjectType;
@@ -39,18 +34,15 @@ import com.zhongzheng.modules.course.service.ICourseBusinessService;
 import com.zhongzheng.modules.course.service.ICourseEducationTypeService;
 import com.zhongzheng.modules.course.service.ICourseProjectTypeService;
 import com.zhongzheng.modules.course.service.ICourseService;
-import com.zhongzheng.modules.exam.domain.ExamNumber;
-import com.zhongzheng.modules.exam.service.IExamNoteService;
-
+import com.zhongzheng.modules.distribution.domain.*;
+import com.zhongzheng.modules.distribution.service.*;
 import com.zhongzheng.modules.goods.service.IGoodsService;
 import com.zhongzheng.modules.goods.vo.GoodsVo;
-import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
 import com.zhongzheng.modules.grade.domain.ClassGradeUserTemp;
 import com.zhongzheng.modules.grade.domain.StudyCountLog;
 import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.service.IClassGradeUserTempService;
 import com.zhongzheng.modules.grade.service.IStudyCountLogService;
-import com.zhongzheng.modules.order.bo.OrderGoodsQueryBo;
 import com.zhongzheng.modules.order.bo.OrderShareMoneyAddBo;
 import com.zhongzheng.modules.order.domain.Order;
 import com.zhongzheng.modules.order.domain.OrderGoods;
@@ -59,31 +51,16 @@ import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderPayService;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.service.IOrderShareMoneyService;
-import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderShareGoodsVo;
 import com.zhongzheng.modules.order.vo.OrderShareToOldVo;
-import com.zhongzheng.modules.polyv.bo.PolyvVideoAddBo;
-import com.zhongzheng.modules.polyv.bo.PolyvVideoEditBo;
-import com.zhongzheng.modules.polyv.bo.PolyvVideoQueryBo;
-import com.zhongzheng.modules.polyv.domain.PolyvVideDo;
-import com.zhongzheng.modules.polyv.domain.PolyvVideo;
-import com.zhongzheng.modules.polyv.domain.TokenResponse;
-import com.zhongzheng.modules.polyv.mapper.PolyvVideoMapper;
-import com.zhongzheng.modules.polyv.service.IPolyvVideoService;
-import com.zhongzheng.modules.polyv.vo.PolyvVideoQuerVo;
-import com.zhongzheng.modules.polyv.vo.PolyvVideoVo;
 import com.zhongzheng.modules.system.service.ISysConfigService;
-import com.zhongzheng.modules.user.bo.OrderPossessUserAddBo;
-import com.zhongzheng.modules.user.bo.UserExamGoodsAddBo;
 import com.zhongzheng.modules.user.bo.UserExamGoodsQueryBo;
 import com.zhongzheng.modules.user.bo.UserExamGoodsSupplementAddBo;
-import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.user.domain.UserExamGoods;
 import com.zhongzheng.modules.user.service.*;
 import com.zhongzheng.modules.user.vo.UserExamGoodsVo;
 import com.zhongzheng.modules.user.vo.UserVo;
 import com.zhongzheng.modules.wx.service.IWxPayService;
-import com.zhongzheng.modules.wx.vo.WxPayVo;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -92,16 +69,11 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import javax.annotation.PostConstruct;
-import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
-import java.util.stream.Collectors;
-
-import static com.squareup.okhttp.internal.Util.md5Hex;
 
 /**
  * 保利威视频信息Service业务层处理
@@ -207,6 +179,27 @@ public class WxPayServiceImpl implements IWxPayService {
     @Autowired
     private IActivityOrderService iActivityOrderService;
 
+    @Autowired
+    private IDistributionActivityService iDistributionActivityService;
+
+    @Autowired
+    private IDistributionActivityGoodsService iDistributionActivityGoodsService;
+
+    @Autowired
+    private IActivityGoodsPriceService iActivityGoodsPriceService;
+
+    @Autowired
+    private IDistributionLinkService iDistributionLinkService;
+
+    @Autowired
+    private IDistributionRebateService iDistributionRebateService;
+
+    @Autowired
+    private IDistributionCashLogService iDistributionCashLogService;
+
+    @Autowired
+    private IDistributionSellerService iDistributionSellerService;
+
     private String gzh_tokenUrl = "https://api.weixin.qq.com/cgi-bin/token";
 
     private String gzh_tokenParam = "grant_type=client_credential&appid=%s&secret=%s";
@@ -481,6 +474,10 @@ public class WxPayServiceImpl implements IWxPayService {
                     updateUserExamGoods(g, order);
                     //商品是否绑定活动模考
 //                    iUserMockSubscribeService.addActivityMock(g.getGoodsId(),order.getUserId());
+                    if (ObjectUtils.isNotNull(g.getDistributionCode())){
+                        //分销返利
+                        distributionRebate(g);
+                    }
                 }
                 shareToOldSys(order,goodsList);
             }
@@ -496,6 +493,120 @@ public class WxPayServiceImpl implements IWxPayService {
         return true;
     }
 
+    private void distributionRebate(OrderGoods g) {
+        //分销订单处理
+        DistributionActivity activity = iDistributionActivityService
+                .getOne(new LambdaQueryWrapper<DistributionActivity>()
+        .eq(DistributionActivity::getCode,g.getDistributionCode())
+        .eq(DistributionActivity::getStatus,1));
+        if (ObjectUtils.isNull(activity)){
+            log.error(String.format("分销返佣失败:活动信息获取失败【%s】",g.getDistributionCode()));
+            return;
+        }
+        DistributionActivityGoods activityGoods = iDistributionActivityGoodsService
+                .getOne(new LambdaQueryWrapper<DistributionActivityGoods>()
+                .eq(DistributionActivityGoods::getDistributionId, activity.getDistributionId())
+                .eq(DistributionActivityGoods::getGoodsId, g.getGoodsId())
+                .eq(DistributionActivityGoods::getStatus, 1)
+                .last("limit 1"));
+        if (ObjectUtils.isNull(activityGoods)){
+            log.error(String.format("分销返佣失败:活动商品信息获取失败【%s】【goodsId:%s】",g.getDistributionCode(),g.getGoodsId()));
+            return;
+        }
+        //获取业务员
+        List<DistributionLink> linkList = iDistributionLinkService
+                .list(new LambdaQueryWrapper<DistributionLink>()
+                .eq(DistributionLink::getLinkCode, g.getDistributionLinkCode())
+                .eq(DistributionLink::getDistributionId, activity.getDistributionId())
+                .orderByAsc(DistributionLink::getCreateTime)
+                .last("limit 3"));
+        if (CollectionUtils.isEmpty(linkList)){
+            log.error(String.format("分销返佣失败:活动链条获取失败【%s】【linkCode:%s】",g.getDistributionCode(),g.getDistributionCode()));
+            return;
+        }
+        //佣金
+        List<BigDecimal> priceList = new ArrayList<>();
+        //比例
+        List<BigDecimal> profitList = new ArrayList<>();
+        switch (activityGoods.getProfitType()){
+            case 1://百分比
+                BigDecimal profitMax = g.getGoodsRealPrice().multiply(activityGoods.getProfitMax());
+                priceList.add(profitMax.multiply(activityGoods.getProfitOne()).setScale(2,BigDecimal.ROUND_HALF_UP));
+                priceList.add(profitMax.multiply(activityGoods.getProfitTwo()).setScale(2,BigDecimal.ROUND_HALF_UP));
+                priceList.add(profitMax.multiply(activityGoods.getProfitThree()).setScale(2,BigDecimal.ROUND_HALF_UP));
+                profitList.add(activityGoods.getProfitOne());
+                profitList.add(activityGoods.getProfitTwo());
+                profitList.add(activityGoods.getProfitThree());
+                break;
+            case 2://固定金额
+                priceList.add(activityGoods.getProfitOne());
+                priceList.add(activityGoods.getProfitTwo());
+                priceList.add(activityGoods.getProfitThree());
+                profitList.add(activityGoods.getProfitOne());
+                profitList.add(activityGoods.getProfitTwo());
+                profitList.add(activityGoods.getProfitThree());
+                break;
+            default :
+                break;
+        }
+        //佣金冻结期是否大于0天
+        Boolean flag = activity.getFreezingPeriod() > 0;
+        for (int i = 0; i < linkList.size(); i++) {
+            DistributionLink linkLink = linkList.get(i);
+            BigDecimal cash = priceList.get(i);
+            //订单
+            DistributionRebate distributionRebate = new DistributionRebate();
+            distributionRebate.setDistributionCode(g.getDistributionCode());
+            distributionRebate.setOrderGoodsId(g.getOrderGoodsId());
+            distributionRebate.setCash(cash);
+            distributionRebate.setSellerId(linkLink.getSellerId());
+            distributionRebate.setSellerLevel(i + 1);
+            distributionRebate.setProfitType(activityGoods.getProfitType());
+            distributionRebate.setProfit(profitList.get(i));
+            distributionRebate.setCreateTime(DateUtils.getNowTime());
+            distributionRebate.setUpdateTime(DateUtils.getNowTime());
+            iDistributionRebateService.save(distributionRebate);
+            //业务员
+            DistributionCashLog cashLog = iDistributionCashLogService
+                    .getOne(new LambdaQueryWrapper<DistributionCashLog>()
+                    .eq(DistributionCashLog::getSellerId, linkLink.getSellerId())
+                    .eq(DistributionCashLog::getRelatedSn, g.getOrderSn())
+                    .last("limit 1"));
+            DistributionCashLog log = new DistributionCashLog();
+            if (ObjectUtils.isNotNull(cashLog)){
+                log.setId(cashLog.getId());
+                log.setDiffNum(cashLog.getDiffNum().add(cash));
+                log.setRemark(cashLog.getRemark()+","+String.format("商品【%s】利润【%s】",g.getGoodsId(),cash));
+            }else {
+                log.setDiffNum(cash);
+                log.setRemark(String.format("商品【%s】利润【%s】",g.getGoodsId(),cash));
+            }
+            log.setSellerId(linkLink.getSellerId());
+            //业务员老金额
+            DistributionSeller seller = iDistributionSellerService.getById(linkLink.getSellerId());
+
+            log.setRelatedSn(g.getOrderSn());
+            if (flag){
+                log.setOldNum(ObjectUtils.isNotNull(cashLog) && ObjectUtils.isNotNull(cashLog.getOldNum())?cashLog.getOldNum():seller.getFreezeCash());
+                log.setType(1);
+                log.setNewNum(seller.getFreezeCash().add(cash));
+                seller.setFreezeCash(seller.getFreezeCash().add(cash));
+            }else {
+                log.setOldNum(ObjectUtils.isNotNull(cashLog) && ObjectUtils.isNotNull(cashLog.getOldNum())?cashLog.getOldNum():seller.getCash());
+                log.setType(2);
+                log.setNewNum(seller.getCash().add(cash));
+                seller.setCash(seller.getCash().add(cash));
+            }
+            log.setCreateTime(DateUtils.getNowTime());
+            log.setUpdateTime(DateUtils.getNowTime());
+
+            iDistributionCashLogService.saveOrUpdate(log);
+            //修改业务员金额
+            iDistributionSellerService.updateById(seller);
+        }
+
+    }
+
     //设置服务期
     @Override
     public OrderGoods setServiceTime(OrderGoods g) {

+ 7 - 0
zhongzheng-system/src/main/resources/mapper/modules/distribution/DistributionRebateMapper.xml

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.modules.distribution.mapper.DistributionRebateMapper">
+
+</mapper>