From 1bcb0f4f3956f61523dc7a27ee254d58a9d4b137 Mon Sep 17 00:00:00 2001
From: jyy <jyy>
Date: Tue, 18 May 2021 17:47:39 +0800
Subject: [PATCH] 修复会员新增公司id没有bug

---
 zq-erp/src/test/java/com/matrix/JyyTests2.java                                      |  241 ++++++++++++++++++++++++++++++++++++++++
 zq-erp/src/test/java/com/matrix/JyyTests.java                                       |   41 ++++++
 zq-erp/src/main/resources/mybatis/mapper/hive/SysVipInfoDao.xml                     |    7 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java     |    6 
 zq-erp/pom.xml                                                                      |    4 
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesProductAction.java |   32 +++++
 zq-erp/src/main/java/com/matrix/system/hive/dao/SysVipInfoDao.java                  |    2 
 7 files changed, 316 insertions(+), 17 deletions(-)

diff --git a/zq-erp/pom.xml b/zq-erp/pom.xml
index 016a56c..ed1dc1f 100644
--- a/zq-erp/pom.xml
+++ b/zq-erp/pom.xml
@@ -401,11 +401,11 @@
                     <exclude>config/xcx/*</exclude>
                     <exclude>config/xcshop/*</exclude>
 
-                    <!--
+                    <!---->
                     <exclude>config/config.json</exclude>
                     <exclude>config/application.properties</exclude>
                     <exclude>config/system.properties</exclude>
-                    -->
+
 
 
                     <exclude>**/*.woff</exclude>
diff --git a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysVipInfoDao.java b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysVipInfoDao.java
index 1295c04..747dc87 100644
--- a/zq-erp/src/main/java/com/matrix/system/hive/dao/SysVipInfoDao.java
+++ b/zq-erp/src/main/java/com/matrix/system/hive/dao/SysVipInfoDao.java
@@ -212,4 +212,6 @@
 	public SysVipInfo findByOpenId(String openId);
 
 	int unbundlingSaleMan(Long userId);
+
+	int bindingRecommend(@Param("recommendId") Long recommendId,@Param("userId") Long userId);
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesProductAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesProductAction.java
index 611820b..faf6fc3 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesProductAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesProductAction.java
@@ -1,10 +1,15 @@
 package com.matrix.system.shopXcx.api.action;
 
+import com.matrix.component.redis.RedisUserLoginUtils;
 import com.matrix.core.pojo.AjaxResult;
 import com.matrix.system.common.constance.AppConstance;
 import com.matrix.system.common.interceptor.HostInterceptor;
+import com.matrix.system.fenxiao.dao.ShopSalesmanGradeDao;
+import com.matrix.system.fenxiao.entity.ShopSalesmanGrade;
+import com.matrix.system.hive.bean.SysVipInfo;
 import com.matrix.system.shopXcx.api.dto.SaleProductDto;
 import com.matrix.system.shopXcx.bean.ShopProduct;
+import com.matrix.system.shopXcx.bean.ShopSku;
 import com.matrix.system.shopXcx.dao.ShopProductAttributeDao;
 import com.matrix.system.shopXcx.dao.ShopProductDao;
 import com.matrix.system.shopXcx.dao.ShopSkuDao;
@@ -19,7 +24,9 @@
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.math.BigDecimal;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * @author jyy
@@ -35,9 +42,12 @@
 
     @Autowired
     private ShopProductAttributeDao shopProductAttributeDao;
-
+    @Autowired
+    private ShopSalesmanGradeDao shopSalesmanGradeDao;
     @Autowired
     private ShopSkuDao shopSkuDao;
+    @Autowired
+    private RedisUserLoginUtils redisUserLoginUtils;
 
     @ApiOperation(value = "查询推广商品", notes = "")
     @PostMapping(value = "/getSalesProductList")
@@ -54,7 +64,25 @@
         shopProduct.setAbleSales(ShopProduct.ABLE_SALES);
         shopProduct.setCompanyId(HostInterceptor.getCompanyId());
         List<ShopProduct> shopProducts = shopProductDao.selectByModelWx(shopProduct);
-        shopProducts.forEach(item->item.setSkus(shopSkuDao.selectByPid(item.getId())));
+        SysVipInfo sysVipInfo = redisUserLoginUtils.getLoginUser(SysVipInfo.class);
+        ShopSalesmanGrade shopSalesmanGrade = shopSalesmanGradeDao.selectById(sysVipInfo.getSalesmanGrade());
+        shopProducts.forEach(item->{
+            List<ShopSku> shopSkus = shopSkuDao.selectByPid(item.getId());
+            //计算产品佣金
+            shopSkus.forEach(shopSku -> {
+                if(Objects.isNull(shopSku.getInvitationPrice())){
+                    shopSku.setInvitationPrice(shopSku.getPrice().multiply(BigDecimal.valueOf(shopSalesmanGrade.getInvitationCommission())).divide(BigDecimal.valueOf(100)));
+                }
+                if(Objects.isNull(shopSku.getSealesPrice())){
+                    shopSku.setSealesPrice(shopSku.getPrice().multiply(BigDecimal.valueOf(shopSalesmanGrade.getSealesCommission())).divide(BigDecimal.valueOf(100)));
+                }
+                if(Objects.isNull(shopSku.getSelfPrice())){
+                    shopSku.setSelfPrice(shopSku.getPrice().multiply(BigDecimal.valueOf(shopSalesmanGrade.getSelfCommission())).divide(BigDecimal.valueOf(100)));
+                }
+            });
+            item.setSkus(shopSkus);
+
+        });
         AjaxResult result = new AjaxResult(AjaxResult.STATUS_SUCCESS, shopProducts);
         return result;
     }
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java
index 7e39d58..ee96c85 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java
@@ -168,11 +168,7 @@
             return AjaxResult.buildSuccessInstance("已经被绑定");
         } else {
             if (loginUser.getRecommendId()==null) {
-                Map<String, Object> updateParam = new HashMap<>();
-                updateParam.put("id", loginUser.getId());
-                loginUser.setRecommendId(invitationUser.getId());
-                loginUser.setBindingParentTime(new Date());
-                sysVipInfoDao.update(loginUser);
+                sysVipInfoDao.bindingRecommend(invitationUser.getId(),loginUser.getId());
                 return AjaxResult.buildSuccessInstance("绑定成功");
             } else {
                 return AjaxResult.buildSuccessInstance("已经存在上级");
diff --git a/zq-erp/src/main/resources/mybatis/mapper/hive/SysVipInfoDao.xml b/zq-erp/src/main/resources/mybatis/mapper/hive/SysVipInfoDao.xml
index 9724622..68afb0d 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/hive/SysVipInfoDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/hive/SysVipInfoDao.xml
@@ -499,9 +499,7 @@
             <if test="isDeal != null  ">
                 is_deal = #{isDeal},
             </if>
-            <if test="recommendId != null  ">
-                recommend_id = #{recommendId},
-            </if>
+
             <if test="province != null and province !=''  ">
                 province = #{province},
             </if>
@@ -552,6 +550,9 @@
     <update id="unbundlingSaleMan">
         UPDATE sys_vip_info set recommend_id = NULL where id=#{userId};
     </update>
+    <update id="bindingRecommend">
+        UPDATE sys_vip_info set recommend_id = #{recommendId} where id=#{userId};
+    </update>
 
     <!-- 批量删除 -->
     <delete id="deleteByIds" parameterType="java.util.List">
diff --git a/zq-erp/src/test/java/com/matrix/JyyTests.java b/zq-erp/src/test/java/com/matrix/JyyTests.java
index 9297740..b955d11 100644
--- a/zq-erp/src/test/java/com/matrix/JyyTests.java
+++ b/zq-erp/src/test/java/com/matrix/JyyTests.java
@@ -1,27 +1,53 @@
 package com.matrix;
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.matrix.component.redis.RedisClient;
+import com.matrix.core.constance.MatrixConstance;
+import com.matrix.core.tools.LogUtil;
+import com.matrix.system.common.bean.BusParameterSettings;
 import com.matrix.system.common.bean.SysFunction;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.fenxiao.constant.FenxiaoSettingConstant;
+import com.matrix.system.fenxiao.dao.ShopSalesmanGradeDao;
+import com.matrix.system.fenxiao.dao.ShopSalesmanOrderDao;
+import com.matrix.system.fenxiao.entity.ShopSalesmanGrade;
+import com.matrix.system.fenxiao.entity.ShopSalesmanOrder;
+import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.system.hive.dao.SysOrderDao;
+import com.matrix.system.hive.dao.SysOrderItemDao;
+import com.matrix.system.hive.dao.SysVipInfoDao;
+import com.matrix.system.hive.service.CodeService;
+import com.matrix.system.hive.service.ShoppingGoodsService;
+import com.matrix.system.hive.service.SysOrderService;
+import com.matrix.system.hive.service.SysVipInfoService;
 import com.matrix.system.hive.service.imp.SysVipInfoServiceImpl;
 import com.matrix.system.score.dao.ScoreVipDetailDao;
 import com.matrix.system.score.service.ScoreVipDetailService;
+import com.matrix.system.shopXcx.bean.ShopOrder;
+import com.matrix.system.shopXcx.bean.ShopOrderDetails;
+import com.matrix.system.shopXcx.bean.ShopProduct;
+import com.matrix.system.shopXcx.dao.ShopOrderDao;
+import com.matrix.system.shopXcx.dao.ShopOrderDetailsDao;
 import com.matrix.system.shopXcx.dao.ShopOrderV2Dao;
+import com.matrix.system.shopXcx.dao.ShopSkuDao;
 import com.matrix.system.shopXcx.mqTask.OrderDingDingNoticeTask;
 import com.rabbitmq.client.Delivery;
 import org.junit.Test;
 import org.junit.runner.RunWith;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.Rollback;
 import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 测试类示例
@@ -56,8 +82,13 @@
     OrderDingDingNoticeTask orderDingDingNoticeTask;
 
     @Test
+    @Rollback
     public void testNoticeTask() throws IOException {
-        orderDingDingNoticeTask.handle("",new Delivery(null,null,"1295".getBytes()));
+    //    orderDingDingNoticeTask.handle("",new Delivery(null,null,"1295".getBytes()));
+
+
+
+
     }
 
 
diff --git a/zq-erp/src/test/java/com/matrix/JyyTests2.java b/zq-erp/src/test/java/com/matrix/JyyTests2.java
new file mode 100644
index 0000000..0304fff
--- /dev/null
+++ b/zq-erp/src/test/java/com/matrix/JyyTests2.java
@@ -0,0 +1,241 @@
+package com.matrix;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONArray;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.matrix.component.redis.RedisClient;
+import com.matrix.core.constance.MatrixConstance;
+import com.matrix.core.tools.LogUtil;
+import com.matrix.system.common.bean.BusParameterSettings;
+import com.matrix.system.common.bean.SysFunction;
+import com.matrix.system.common.dao.BusParameterSettingsDao;
+import com.matrix.system.fenxiao.constant.FenxiaoSettingConstant;
+import com.matrix.system.fenxiao.dao.ShopSalesmanGradeDao;
+import com.matrix.system.fenxiao.dao.ShopSalesmanOrderDao;
+import com.matrix.system.fenxiao.entity.ShopSalesmanGrade;
+import com.matrix.system.fenxiao.entity.ShopSalesmanOrder;
+import com.matrix.system.hive.bean.SysVipInfo;
+import com.matrix.system.hive.dao.SysOrderDao;
+import com.matrix.system.hive.dao.SysOrderItemDao;
+import com.matrix.system.hive.dao.SysVipInfoDao;
+import com.matrix.system.hive.service.CodeService;
+import com.matrix.system.hive.service.ShoppingGoodsService;
+import com.matrix.system.hive.service.SysOrderService;
+import com.matrix.system.hive.service.SysVipInfoService;
+import com.matrix.system.hive.service.imp.SysVipInfoServiceImpl;
+import com.matrix.system.score.dao.ScoreVipDetailDao;
+import com.matrix.system.score.service.ScoreVipDetailService;
+import com.matrix.system.shopXcx.bean.ShopOrder;
+import com.matrix.system.shopXcx.bean.ShopOrderDetails;
+import com.matrix.system.shopXcx.bean.ShopProduct;
+import com.matrix.system.shopXcx.dao.ShopOrderDao;
+import com.matrix.system.shopXcx.dao.ShopOrderDetailsDao;
+import com.matrix.system.shopXcx.dao.ShopOrderV2Dao;
+import com.matrix.system.shopXcx.dao.ShopSkuDao;
+import com.matrix.system.shopXcx.mqTask.OrderDingDingNoticeTask;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.annotation.Rollback;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.io.IOException;
+import java.util.*;
+
+/**
+ * 测试类示例
+ *
+ * @author jiangyouyao
+ * @email 512061637@qq.com
+ * @date 2019年2月25日
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = {ZqErpApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class JyyTests2 {
+
+    @Autowired
+    ShopOrderDao shopOrderDao;
+    @Autowired
+    ShopOrderDetailsDao shopOrderDetailsDao;
+
+    @Autowired
+    SysVipInfoService sysVipInfoService;
+
+
+    @Autowired
+    private SysVipInfoDao vipDap;
+
+    @Autowired
+    SysVipInfoDao vipDao;
+
+    @Autowired
+    CodeService codeService;
+
+    @Autowired
+    SysOrderDao sysOrderDao;
+
+    @Autowired
+    ShoppingGoodsService shoppingGoodsService;
+
+    @Autowired
+    SysOrderItemDao orderItemDao;
+
+    @Autowired
+    SysOrderService orderService;
+
+    @Autowired
+    ShopSkuDao shopSkuDao;
+
+    @Autowired
+    BusParameterSettingsDao parameterSettingsDao;
+
+
+    @Autowired
+    private ShopSalesmanOrderDao shopSalesmanOrderDao;
+
+    @Autowired
+    private ShopSalesmanGradeDao shopSalesmanGradeDao;
+
+
+    @Test
+    @Rollback
+    public void testNoticeTask() throws IOException {
+    //    orderDingDingNoticeTask.handle("",new Delivery(null,null,"1295".getBytes()));
+
+            ShopOrder order=shopOrderDao.selectById(1353);
+            //判读客户是否存在上级,存在则产生上级的收益
+            SysVipInfo sysVipInfo = sysVipInfoService.findById(order.getUserId());
+            LogUtil.debug("处理分销订单userOpid={}",sysVipInfo.getOpenId());
+            //判断是否重复生成
+            QueryWrapper queryWrapper=new QueryWrapper();
+            queryWrapper.eq("order_id",order.getId());
+            Integer orderCount = shopSalesmanOrderDao.selectCount(queryWrapper);
+                ShopSalesmanOrder salesmanOrder=new ShopSalesmanOrder();
+                salesmanOrder.setCompanyId(order.getCompanyId());
+                salesmanOrder.setCreateBy(MatrixConstance.SYSTEM_USER);
+                salesmanOrder.setUpdateBy(MatrixConstance.SYSTEM_USER);
+                salesmanOrder.setCreateTime(new Date());
+                salesmanOrder.setUpdateTime(new Date());
+                salesmanOrder.setOrderId(Long.parseLong(order.getId()+""));
+                salesmanOrder.setUserId(order.getUserId());
+                salesmanOrder.setRevenueType(ShopSalesmanOrder.REVENUE_TYPE_SALES);
+                salesmanOrder.setOrderStatus(ShopSalesmanOrder.STATUS_DJS);
+                Double selfAmount=0D;
+                Double zk=1D;
+                //分销订单总额
+                Double orderTotal=0D;
+                for (ShopOrderDetails item:order.getDetails() ){
+                    if(item.getShopProduct().getAbleSales()==ShopProduct.ABLE_SALES){
+                        orderTotal+=item.getTotalPrice().doubleValue();
+                    }
+                }
+                //自购返佣
+                Integer isSales = sysVipInfo.getIsSales();
+                if(SysVipInfo.IS_SALES == isSales){
+                    for (ShopOrderDetails item:order.getDetails() ){
+                        if(item.getShopProduct().getAbleSales()==ShopProduct.ABLE_SALES){
+                            //分销规则是否开启自购返佣
+                            BusParameterSettings zgfy = parameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_ZGFY, sysVipInfo.getCompanyId());
+                            //按分销等级计算
+                            ShopSalesmanGrade shopSalesmanGrade = shopSalesmanGradeDao.selectById(sysVipInfo.getSalesmanGrade());
+                            if(ObjectUtil.isNotEmpty(zgfy)) {
+                                //获取商品的自购返佣价格,如果没有设置,在去获取当前推广人的等级的自购返佣比例
+                                if(StrUtil.isNotEmpty(zgfy.getParamValue()) &&
+                                        FenxiaoSettingConstant.FX_ZGFY_YES.equals(zgfy.getParamValue())) {
+                                    if(item.getShopSku().getSelfPrice() == null
+                                            ||item.getShopSku().getSealesPrice().doubleValue() == 0){
+                                        selfAmount+=item.getTotalPrice().doubleValue()*(shopSalesmanGrade.getSelfCommission()/100);
+                                    }else {
+                                        //按产品设置的自购返佣金额计算
+                                        selfAmount+=item.getShopSku().getSelfPrice().doubleValue()*item.getCount();
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    //自购返佣记录
+                    if(selfAmount > 0) {
+                        //整体的优惠金额折算成折扣,* 佣金
+                        zk=(order.getOrderMoney().doubleValue()-order.getPostage().doubleValue())/orderTotal;
+                        selfAmount=selfAmount*zk;
+                        salesmanOrder.setAmount(selfAmount);
+                        salesmanOrder.setSalesUserId(order.getUserId());
+                        shopSalesmanOrderDao.insert(salesmanOrder);
+                    }
+                }
+
+                //存在上级
+                if(sysVipInfo.getRecommendId()!=null) {
+                    SysVipInfo salesMan=sysVipInfoService.findById(sysVipInfo.getRecommendId());
+                    Double salesAmount=0D;
+                    Double invitationAmount=0D;
+                    SysVipInfo invitationMan=null;
+                    ShopSalesmanOrder invitationOrder=null;
+                    boolean hasInvitationMan=salesMan.getRecommendId()!=null;
+                    //判断推广员是否还存在上级,存在则计算邀请收益
+                    if(hasInvitationMan){
+                        invitationMan=sysVipInfoService.findById(salesMan.getRecommendId());
+                        invitationOrder=new ShopSalesmanOrder();
+                        BeanUtils.copyProperties(salesmanOrder,invitationOrder);
+                        invitationOrder.setSalesUserId(invitationMan.getId());
+                        invitationOrder.setRevenueType(ShopSalesmanOrder.REVENUE_TYPE_INVITATION);
+                    }
+                    //收益计算
+                    for (ShopOrderDetails item:order.getDetails() ){
+                        if(item.getShopProduct().getAbleSales()== ShopProduct.ABLE_SALES){
+                            //按分销等级计算
+                            ShopSalesmanGrade shopSalesmanGrade = shopSalesmanGradeDao.selectById(salesMan.getSalesmanGrade());
+                            //推广提成,按分销等级计算或者按产品设置的推广金额计算
+                            if(item.getShopSku().getSealesPrice()==null
+                                    ||item.getShopSku().getSealesPrice().doubleValue()==0){
+                                salesAmount+=item.getTotalPrice().doubleValue()*(shopSalesmanGrade.getSealesCommission()/100);
+                            }else{
+                                salesAmount+=item.getShopSku().getSealesPrice().doubleValue()*item.getCount();
+                            }
+                            //邀请提成,获取商品的邀请提成价格和是否有上级推广人,如果没有设置,在去获取当前推广人的等级的自购返佣比例
+                            if(hasInvitationMan) {
+                                if(item.getShopSku().getInvitationPrice() == null
+                                        ||item.getShopSku().getInvitationPrice().doubleValue() == 0){
+                                    //获取上级的推广等级设置
+                                    ShopSalesmanGrade invitationManGrade = shopSalesmanGradeDao.selectById(invitationMan.getSalesmanGrade());
+                                    invitationAmount+=item.getTotalPrice().doubleValue()*(invitationManGrade.getInvitationCommission()/100);
+                                }else {
+                                    //按产品设置的邀请提成价格计算
+                                    invitationAmount+=item.getShopSku().getInvitationPrice().doubleValue()*item.getCount();
+                                }
+                            }
+                        }
+                    }
+                    //推广提成记录
+                    if(salesAmount>0){
+                        //整体的优惠金额折算成折扣,* 佣金
+                        zk=(order.getOrderMoney().doubleValue()-order.getPostage().doubleValue())/orderTotal;
+                        salesAmount=salesAmount*zk;
+                        salesmanOrder.setAmount(salesAmount);
+                        salesmanOrder.setSalesUserId(sysVipInfo.getRecommendId());
+                        shopSalesmanOrderDao.insert(salesmanOrder);
+                    }
+                    //邀请提成记录
+                    if(invitationAmount > 0) {
+                        //整体的优惠金额折算成折扣,* 佣金
+                        invitationAmount=invitationAmount*zk;
+                        invitationOrder.setAmount(invitationAmount);
+                        shopSalesmanOrderDao.insert(invitationOrder);
+                    }
+                }else{
+                    LogUtil.debug("不存在父级userOpid={}",sysVipInfo.getOpenId());
+                }
+
+
+
+
+    }
+
+
+
+}

--
Gitblit v1.9.1