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