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()); 
 | 
                } 
 | 
  
 | 
  
 | 
  
 | 
  
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
} 
 |