jyy
2021-05-18 1bcb0f4f3956f61523dc7a27ee254d58a9d4b137
修复会员新增公司id没有bug
1 files added
6 files modified
333 ■■■■■ changed files
zq-erp/pom.xml 4 ●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/dao/SysVipInfoDao.java 2 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesProductAction.java 32 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java 6 ●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/mybatis/mapper/hive/SysVipInfoDao.xml 7 ●●●●● patch | view | raw | blame | history
zq-erp/src/test/java/com/matrix/JyyTests.java 41 ●●●● patch | view | raw | blame | history
zq-erp/src/test/java/com/matrix/JyyTests2.java 241 ●●●●● patch | view | raw | blame | history
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>
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);
}
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;
    }
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("已经存在上级");
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">
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()));
    }
zq-erp/src/test/java/com/matrix/JyyTests2.java
New file
@@ -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());
                }
    }
}