From fd563c2a20613325efcc37cbc8aa754eeeba5e45 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Mon, 29 Mar 2021 14:19:03 +0800
Subject: [PATCH] Merge branch 'score_shop' of http://120.27.238.55:7000/r/beauty-erp into score_shop

---
 zq-erp/src/main/resources/templates/views/admin/fenxiao/fenxiao-setting.html                   |   33 +++
 zq-erp/src/main/java/com/matrix/system/fenxiao/entity/ShopSalesmanGrade.java                   |    7 
 zq-erp/src/main/resources/templates/views/admin/shop/shopAdvertisType-list.html                |    2 
 zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopSkuDao.xml                                |   12 +
 zq-erp/src/main/java/com/matrix/system/shopXcx/api/action/WxSalesmanAction.java                |    4 
 zq-erp/src/main/resources/config/db/increment/推广员.sql                                          |   12 +
 zq-erp/src/main/java/com/matrix/system/fenxiao/action/FenXiaoSettingAction.java                |    6 
 zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/SalesOrderTask.java                      |  178 ++++++++++------
 zq-erp/src/main/java/com/matrix/system/common/service/impl/InitBusParameterSettingService.java |    3 
 zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopSku.java                               |   13 +
 zq-erp/src/main/java/com/matrix/system/fenxiao/constant/FenxiaoSettingConstant.java            |    7 
 zq-erp/src/main/java/com/matrix/system/fenxiao/dto/UpdateFyfaDto.java                          |    3 
 zq-erp/src/main/java/com/matrix/system/fenxiao/vo/FyfaManageVo.java                            |    3 
 zq-erp/src/main/resources/mybatis/mapper/fenxiao/ShopSalesmanGradeDao.xml                      |    1 
 zq-erp/src/main/resources/templates/views/admin/fenxiao/fenxiao-user.html                      |    9 
 zq-erp/src/main/java/com/matrix/system/fenxiao/service/ShopSalesmanApplyService.java           |   16 +
 zq-erp/src/main/java/com/matrix/biz/service/impl/BizUserServiceImpl.java                       |    4 
 zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopAdvertisDao.xml                           |   20 +
 zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopAdvertis.java                          |   13 +
 zq-erp/src/test/java/com/matrix/SalesOrderTaskTest.java                                        |  247 ++++++++++++++++++++++
 zq-erp/src/main/java/com/matrix/biz/service/BizUserService.java                                |    2 
 zq-erp/src/main/resources/mybatis/mapper/fenxiao/ShopSalesmanApplyDao.xml                      |    4 
 zq-erp/src/main/resources/templates/views/admin/shop/shopProduct-form.html                     |   48 +--
 23 files changed, 542 insertions(+), 105 deletions(-)

diff --git a/zq-erp/src/main/java/com/matrix/biz/service/BizUserService.java b/zq-erp/src/main/java/com/matrix/biz/service/BizUserService.java
index 7aa2b0f..be36239 100644
--- a/zq-erp/src/main/java/com/matrix/biz/service/BizUserService.java
+++ b/zq-erp/src/main/java/com/matrix/biz/service/BizUserService.java
@@ -78,5 +78,5 @@
 	 * 设置为推广员
 	 * @param invitationId
 	 */
-	public int setToBeAnSalesman(String openId,String invitationId);
+	public int setToBeAnSalesman(String openId,String invitationId,long gradeId);
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/biz/service/impl/BizUserServiceImpl.java b/zq-erp/src/main/java/com/matrix/biz/service/impl/BizUserServiceImpl.java
index f2d62d6..7e24950 100644
--- a/zq-erp/src/main/java/com/matrix/biz/service/impl/BizUserServiceImpl.java
+++ b/zq-erp/src/main/java/com/matrix/biz/service/impl/BizUserServiceImpl.java
@@ -8,7 +8,6 @@
 import com.matrix.core.exception.GlobleException;
 import com.matrix.core.pojo.PaginationVO;
 import com.matrix.core.tools.ModelUtils;
-import com.matrix.core.tools.UUIDUtil;
 import com.matrix.system.common.constance.AppConstance;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -158,11 +157,12 @@
 	 * @param invitationId
 	 */
 	@Override
-	public int setToBeAnSalesman(String openId,String invitationId) {
+	public int setToBeAnSalesman(String openId,String invitationId,long gradeId) {
 		BizUser bizUser=bizUserDao.findByOpenId(openId);
 		bizUser.setIsSales(BizUser.IS_SALES);
 		bizUser.setParentOpenId(invitationId);
 		bizUser.setBindingParentTime(new Date());
+		bizUser.setSalesmanGrade(gradeId);
 		return bizUserDao.updateByModel(bizUser);
 	}
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/common/service/impl/InitBusParameterSettingService.java b/zq-erp/src/main/java/com/matrix/system/common/service/impl/InitBusParameterSettingService.java
index 2e93055..0c35449 100644
--- a/zq-erp/src/main/java/com/matrix/system/common/service/impl/InitBusParameterSettingService.java
+++ b/zq-erp/src/main/java/com/matrix/system/common/service/impl/InitBusParameterSettingService.java
@@ -43,7 +43,7 @@
     }
 
     /**
-     * 初始化默认积分规则设置
+     * 初始化默认分销规则设置
      */
     public void initBusParameterFenxiaoSetting(SysCompany sysCompany) {
         long companyId = sysCompany.getComId();
@@ -55,6 +55,7 @@
         ruleSettings.add(addScoreRuleSetting(FenxiaoSettingConstant.FX_APPLY_CONDITION, companyId));
         ruleSettings.add(addScoreRuleSetting(FenxiaoSettingConstant.FX_TG_PLAN, companyId));
         ruleSettings.add(addScoreRuleSetting(FenxiaoSettingConstant.FX_TG_POSTER, companyId));
+        ruleSettings.add(addScoreRuleSetting(FenxiaoSettingConstant.FX_ZGFY, companyId));
         busParameterSettingsDao.batchInsert(ruleSettings);
     }
 
diff --git a/zq-erp/src/main/java/com/matrix/system/fenxiao/action/FenXiaoSettingAction.java b/zq-erp/src/main/java/com/matrix/system/fenxiao/action/FenXiaoSettingAction.java
index 2795142..1252651 100644
--- a/zq-erp/src/main/java/com/matrix/system/fenxiao/action/FenXiaoSettingAction.java
+++ b/zq-erp/src/main/java/com/matrix/system/fenxiao/action/FenXiaoSettingAction.java
@@ -60,6 +60,12 @@
        String[] FXKGName={"分销开关"};
        List<FenXiaoSettingVo> fxkgRuleSettingsVo = getRuleSettingsVo(FXKGCode,FXKGName,companyId);
        result.putInMap("fxkg", fxkgRuleSettingsVo);
+       //自购返佣
+       String[] ZGFYCode={FenxiaoSettingConstant.FX_ZGFY};
+       String[] ZGFYName={"自购返佣"};
+       List<FenXiaoSettingVo> zgfyRuleSettingsVo = getRuleSettingsVo(ZGFYCode,ZGFYName,companyId);
+       result.putInMap("zgfy", zgfyRuleSettingsVo);
+
        //分销模式
        String[] FXMSCode={FenxiaoSettingConstant.FX_MODEL};
        String[] FXMSName={"分销模式"};
diff --git a/zq-erp/src/main/java/com/matrix/system/fenxiao/constant/FenxiaoSettingConstant.java b/zq-erp/src/main/java/com/matrix/system/fenxiao/constant/FenxiaoSettingConstant.java
index de2bc10..3153b35 100644
--- a/zq-erp/src/main/java/com/matrix/system/fenxiao/constant/FenxiaoSettingConstant.java
+++ b/zq-erp/src/main/java/com/matrix/system/fenxiao/constant/FenxiaoSettingConstant.java
@@ -10,6 +10,13 @@
      */
     public final static String FX_MODEL = "FX_MODEL";
     /**
+     * 自购返佣 1:是 2:否
+     */
+    public final static String FX_ZGFY = "FX_ZGFY";
+
+    public final static String FX_ZGFY_YES = "1";
+    public final static String FX_ZGFY_NO = "2";
+    /**
      * 申请方式
      */
     public final static String FX_APPLY_WAY = "FX_APPLY_WAY";
diff --git a/zq-erp/src/main/java/com/matrix/system/fenxiao/dto/UpdateFyfaDto.java b/zq-erp/src/main/java/com/matrix/system/fenxiao/dto/UpdateFyfaDto.java
index ea89977..31dcf80 100644
--- a/zq-erp/src/main/java/com/matrix/system/fenxiao/dto/UpdateFyfaDto.java
+++ b/zq-erp/src/main/java/com/matrix/system/fenxiao/dto/UpdateFyfaDto.java
@@ -14,6 +14,9 @@
 	@ApiModelProperty(value = "方案名称")
 	private String  name;
 
+	@ApiModelProperty(value = "自购返佣%")
+	private Double  selfCommission;
+
 	@ApiModelProperty(value = "推广提成%")
 	private Double  sealesCommission;
 	
diff --git a/zq-erp/src/main/java/com/matrix/system/fenxiao/entity/ShopSalesmanGrade.java b/zq-erp/src/main/java/com/matrix/system/fenxiao/entity/ShopSalesmanGrade.java
index a29b2c3..999b02c 100644
--- a/zq-erp/src/main/java/com/matrix/system/fenxiao/entity/ShopSalesmanGrade.java
+++ b/zq-erp/src/main/java/com/matrix/system/fenxiao/entity/ShopSalesmanGrade.java
@@ -33,6 +33,13 @@
 
 
 	private Double  sealesCommission;
+
+	/**
+	 * 自购返佣比例%
+	 */
+
+	private Double  selfCommission;
+
 	
 	/**
 	 * 邀请提成 %
diff --git a/zq-erp/src/main/java/com/matrix/system/fenxiao/service/ShopSalesmanApplyService.java b/zq-erp/src/main/java/com/matrix/system/fenxiao/service/ShopSalesmanApplyService.java
index 37e9b50..cd840dc 100644
--- a/zq-erp/src/main/java/com/matrix/system/fenxiao/service/ShopSalesmanApplyService.java
+++ b/zq-erp/src/main/java/com/matrix/system/fenxiao/service/ShopSalesmanApplyService.java
@@ -54,7 +54,7 @@
     ShopSalesmanGradeDao shopSalesmanGradeDao;
 
     @Autowired
-    private BizUserDao bizUserDao;
+    BizUserDao bizUserDao;
 
     @Autowired
     BizUserService bizUserService;
@@ -116,8 +116,13 @@
                 if(busParameterSettings!=null
                         &&busParameterSettings.getParamValue().equals("1")){
                     //自动审核
+                    //初始等级ID(公司id,是否为初始等级)
+                    QueryWrapper<ShopSalesmanGrade> queryWrapperOrepool = new QueryWrapper<>();
+                    queryWrapperOrepool.eq("company_id", loginUser.getCompanyId());
+                    queryWrapperOrepool.eq("is_default", 1);
+                    ShopSalesmanGrade shopSalesmanGrade = shopSalesmanGradeDao.selectOne(queryWrapperOrepool);
                     shopSalesmanApply.setApplyStatus(ShopSalesmanApply.APPLY_STATUS_TG);
-                    bizUserService.setToBeAnSalesman(loginUser.getOpenId(),invitationId);
+                    bizUserService.setToBeAnSalesman(loginUser.getOpenId(),invitationId,shopSalesmanGrade.getId());
 
                 }else{
                     shopSalesmanApply.setApplyStatus(ShopSalesmanApply.APPLY_STATUS_DSH);
@@ -225,6 +230,7 @@
 		//修改USER的状态
 		bizUser.setParentOpenId(parentUserId);
 		bizUser.setBindingParentTime(new Date());
+        bizUser.setSalesmanGrade(shopSalesmanApply.getGradeId());
 		bizUserDao.updateByModel(bizUser);
 	}
 
@@ -371,6 +377,10 @@
         if(StrUtil.isEmpty(name)) {
         	return AjaxResult.buildFailInstance("请输入方案名称");
         }
+        Double selfCommission = updateFyfaDto.getSelfCommission();
+        if(ObjectUtil.isEmpty(selfCommission)) {
+            return AjaxResult.buildFailInstance("请输入正确的自购返佣");
+        }
         Double sealesCommission = updateFyfaDto.getSealesCommission();
         if(ObjectUtil.isEmpty(sealesCommission)) {
         	return AjaxResult.buildFailInstance("请输入正确的推广提成");
@@ -384,6 +394,7 @@
             ShopSalesmanGrade shopSalesmanGrade = new ShopSalesmanGrade();
             shopSalesmanGrade.setCompanyId(updateFyfaDto.getCompanyId());
             shopSalesmanGrade.setName(updateFyfaDto.getName());
+            shopSalesmanGrade.setSelfCommission(selfCommission);
             shopSalesmanGrade.setSealesCommission(sealesCommission);
             shopSalesmanGrade.setInvitationCommission(invitationCommission);
             shopSalesmanGrade.setGradeCondition(updateFyfaDto.getGradeCondition());
@@ -398,6 +409,7 @@
         }
         selectById.setCompanyId(updateFyfaDto.getCompanyId());
         selectById.setName(updateFyfaDto.getName());
+        selectById.setSelfCommission(selfCommission);
         selectById.setSealesCommission(sealesCommission);
         selectById.setInvitationCommission(invitationCommission);
         selectById.setGradeCondition(updateFyfaDto.getGradeCondition());
diff --git a/zq-erp/src/main/java/com/matrix/system/fenxiao/vo/FyfaManageVo.java b/zq-erp/src/main/java/com/matrix/system/fenxiao/vo/FyfaManageVo.java
index 97dc22d..6ce68e6 100644
--- a/zq-erp/src/main/java/com/matrix/system/fenxiao/vo/FyfaManageVo.java
+++ b/zq-erp/src/main/java/com/matrix/system/fenxiao/vo/FyfaManageVo.java
@@ -14,6 +14,9 @@
 	@ApiModelProperty(value = "方案名称")
 	private String  name;
 
+	@ApiModelProperty(value = "自购返佣%")
+	private Double  selfCommission;
+
 	@ApiModelProperty(value = "推广提成%")
 	private Double  sealesCommission;
 	
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 7e81a21..4f0b0d9 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,6 +168,8 @@
         loginUser = bizUserDao.selectById(loginUser.getUserId());
         if(loginUser.getIsSales()==1){
             return AjaxResult.buildSuccessInstance("只有非分销员才能被绑定成客户");
+        }if (StringUtils.isNotBlank(loginUser.getParentOpenId())){
+            return AjaxResult.buildSuccessInstance("已经被绑定");
         }else{
             if (StringUtils.isBlank(loginUser.getParentOpenId())) {
                 Map<String, Object> updateParam = new HashMap<>();
@@ -203,7 +205,7 @@
 
             String urlPath = baseSaveUrl + "/" + "wxacode" + "/" + targetImg;
 
-            String qrcodeSavePath = WxacodeUtil.getWxacode(loginUser.getOpenId() + "", "pages/distributorCenter/applyFor/applyFor", MD5Util.strToMD5(loginUser.getOpenId())+"qrcode"
+            String qrcodeSavePath = WxacodeUtil.getWxacode(loginUser.getUserId() + "", "pages/distributorCenter/applyFor/applyFor", MD5Util.strToMD5(loginUser.getOpenId())+"qrcode"
                     ,weChatApiTools.getAppid(loginUser.getCompanyId()),weChatApiTools.getSecret(loginUser.getCompanyId()));
 
             BufferedImage qrcordImgBuf = ImageIO.read(new File(qrcodeSavePath));
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopAdvertis.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopAdvertis.java
index 7e42075..daec16c 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopAdvertis.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopAdvertis.java
@@ -63,12 +63,25 @@
 	 */
 	private String linkUrl;
 
+	/**连接的页面id */
+	private  Long  pageId;
+
 	/**
 	 * 所属分类
 	 */
 	@Extend
 	private String adtName;
+
 	private Long companyId;
+
+	public Long getPageId() {
+		return pageId;
+	}
+
+	public void setPageId(Long pageId) {
+		this.pageId = pageId;
+	}
+
 	public Long getCompanyId() {
 		return companyId;
 	}
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopSku.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopSku.java
index e33cd09..5597740 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopSku.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/bean/ShopSku.java
@@ -49,6 +49,11 @@
 	 * 价格
 	 */
 	private BigDecimal price;
+
+	/**
+	 *自购提成
+	 */
+	private BigDecimal selfPrice;
 	/**
 	 *推广提成
 	 */
@@ -282,4 +287,12 @@
 		return id.equals(((ShopSku) obj).getId());
 	}
 
+	public BigDecimal getSelfPrice() {
+		return selfPrice;
+	}
+
+	public void setSelfPrice(BigDecimal selfPrice) {
+		this.selfPrice = selfPrice;
+	}
+
 }
\ No newline at end of file
diff --git a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/SalesOrderTask.java b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/SalesOrderTask.java
index 86c6c9a..43ec960 100644
--- a/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/SalesOrderTask.java
+++ b/zq-erp/src/main/java/com/matrix/system/shopXcx/mqTask/SalesOrderTask.java
@@ -1,13 +1,17 @@
 package com.matrix.system.shopXcx.mqTask;
 
 
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.matrix.biz.bean.BizUser;
 import com.matrix.biz.service.BizUserService;
 import com.matrix.core.constance.MatrixConstance;
 import com.matrix.core.tools.LogUtil;
 import com.matrix.core.tools.StringUtils;
+import com.matrix.system.common.bean.BusParameterSettings;
 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;
@@ -20,6 +24,7 @@
 import com.matrix.system.hive.service.SysOrderService;
 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.ShopSkuDao;
@@ -109,88 +114,129 @@
     void handleExtensionOrder(ShopOrder order) {
         //判读客户是否存在上级,存在则产生上级的收益
         BizUser bizUser = bizUserService.findByOpenId(order.getUserId());
-        if(StringUtils.isNotBlank(bizUser.getParentOpenId())){//存在上级
-
-            LogUtil.debug("处理分销订单userOpid={}",bizUser.getOpenId());
-            //判断是否重复生成
-            QueryWrapper queryWrapper=new QueryWrapper();
-            queryWrapper.eq("order_id",order.getId());
-            Integer orderCount = shopSalesmanOrderDao.selectCount(queryWrapper);
-            if(orderCount==0){
-                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.setSalesUserId(bizUser.getParentOpenId());
-                salesmanOrder.setRevenueType(ShopSalesmanOrder.REVENUE_TYPE_SALES);
-                salesmanOrder.setOrderStatus(ShopSalesmanOrder.STATUS_DJS);
-                Double salesAmount=0D;
-                Double invitationAmount=0D;
-                Double orderTotal=0D;
-                Double zk=1D;
-
-                BizUser salesMan=bizUserService.findByOpenId(bizUser.getParentOpenId());
-                BizUser invitationMan=null;
-                ShopSalesmanOrder invitationOrder=null;
-                boolean hasInvitationMan=StringUtils.isNotBlank(salesMan.getParentOpenId());
-
-                //判断推广员是否还存在上级,存在则计算邀请收益
-                if(hasInvitationMan){
-                    invitationMan=bizUserService.findByOpenId(salesMan.getParentOpenId());
-                    invitationOrder=new ShopSalesmanOrder();
-                    BeanUtils.copyProperties(salesmanOrder,invitationOrder);
-                    invitationOrder.setSalesUserId(invitationMan.getOpenId());
-                    invitationOrder.setRevenueType(ShopSalesmanOrder.REVENUE_TYPE_INVITATION);
+        LogUtil.debug("处理分销订单userOpid={}",bizUser.getOpenId());
+        //判断是否重复生成
+        QueryWrapper queryWrapper=new QueryWrapper();
+        queryWrapper.eq("order_id",order.getId());
+        Integer orderCount = shopSalesmanOrderDao.selectCount(queryWrapper);
+        if(orderCount==0){
+            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 = bizUser.getIsSales();
+            if(BizUser.IS_SALES == isSales){
                 for (ShopOrderDetails item:order.getDetails() ){
-                    if(StringUtils.isNotBlank(item.getShopProduct().getAttrValues())
-                            && item.getShopProduct().getAttrValues().contains("分销商城")){
-                        if(item.getShopSku().getSealesPrice()==null
-                                ||item.getShopSku().getSealesPrice().doubleValue()==0){
-                            //按分销等级计算
-                            ShopSalesmanGrade shopSalesmanGrade = shopSalesmanGradeDao.selectById(salesMan.getSalesmanGrade());
-                            salesAmount+=item.getTotalPrice().doubleValue()*(shopSalesmanGrade.getSealesCommission()/100);
-
-                            if(hasInvitationMan){
-                                ShopSalesmanGrade invitationManGrade = shopSalesmanGradeDao.selectById(invitationMan.getSalesmanGrade());
-                                invitationAmount+=item.getTotalPrice().doubleValue()*(invitationManGrade.getInvitationCommission()/100);
-                            }
-
-                        }else{
-                            //按产品设置的推广金额计算
-                            salesAmount+=item.getShopSku().getSealesPrice().doubleValue()*item.getCount();
-                            if(hasInvitationMan){
-                                invitationAmount+=item.getShopSku().getInvitationPrice().doubleValue()*item.getCount();
+                    if(item.getShopProduct().getAbleSales()==ShopProduct.ABLE_SALES){
+                        //分销规则是否开启自购返佣
+                        BusParameterSettings zgfy = parameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_ZGFY, bizUser.getCompanyId());
+                        //按分销等级计算
+                        ShopSalesmanGrade shopSalesmanGrade = shopSalesmanGradeDao.selectById(bizUser.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();
+                                }
                             }
                         }
-                        orderTotal+=item.getTotalPrice().doubleValue();
                     }
                 }
+                //自购返佣记录
+                if(selfAmount > 0) {
+                    //整体的优惠金额折算成折扣,* 佣金
+                    zk=order.getOrderMoney().doubleValue()/orderTotal;
+                    selfAmount=selfAmount*zk;
+                    salesmanOrder.setAmount(selfAmount);
+                    salesmanOrder.setSalesUserId(order.getUserId());
+                    shopSalesmanOrderDao.insert(salesmanOrder);
+                }
+            }
+
+            //存在上级
+            if(StringUtils.isNotBlank(bizUser.getParentOpenId())) {
+            	BizUser salesMan=bizUserService.findByOpenId(bizUser.getParentOpenId());
+                Double salesAmount=0D;
+                Double invitationAmount=0D;
+            	BizUser invitationMan=null;
+            	ShopSalesmanOrder invitationOrder=null;
+            	boolean hasInvitationMan=StringUtils.isNotBlank(salesMan.getParentOpenId());
+            	//判断推广员是否还存在上级,存在则计算邀请收益
+            	if(hasInvitationMan){
+            		invitationMan=bizUserService.findByOpenId(salesMan.getParentOpenId());
+            		invitationOrder=new ShopSalesmanOrder();
+            		BeanUtils.copyProperties(salesmanOrder,invitationOrder);
+            		invitationOrder.setSalesUserId(invitationMan.getOpenId());
+            		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()/orderTotal;
                     salesAmount=salesAmount*zk;
                     salesmanOrder.setAmount(salesAmount);
+                    salesmanOrder.setSalesUserId(bizUser.getParentOpenId());
                     shopSalesmanOrderDao.insert(salesmanOrder);
-                    if(hasInvitationMan){
-                        invitationAmount=invitationAmount*zk;
-                        invitationOrder.setAmount(invitationAmount);
-                        shopSalesmanOrderDao.insert(invitationOrder);
-                    }
                 }
+                //邀请提成记录
+                if(invitationAmount > 0) {
+                	//整体的优惠金额折算成折扣,* 佣金
+                	invitationAmount=invitationAmount*zk;
+                    invitationOrder.setAmount(invitationAmount);
+                    shopSalesmanOrderDao.insert(invitationOrder);
+                } 
             }else{
-                LogUtil.debug("重复订单id={}",order.getId());
+                LogUtil.debug("不存在父级userOpid={}",bizUser.getOpenId());
             }
         }else{
-            LogUtil.debug("不存在父级userOpid={}",bizUser.getOpenId());
+            LogUtil.debug("重复订单id={}",order.getId());
         }
-
-
     }
 }
diff --git "a/zq-erp/src/main/resources/config/db/increment/\346\216\250\345\271\277\345\221\230.sql" "b/zq-erp/src/main/resources/config/db/increment/\346\216\250\345\271\277\345\221\230.sql"
index 54180a7..f725cae 100644
--- "a/zq-erp/src/main/resources/config/db/increment/\346\216\250\345\271\277\345\221\230.sql"
+++ "b/zq-erp/src/main/resources/config/db/increment/\346\216\250\345\271\277\345\221\230.sql"
@@ -209,3 +209,15 @@
 ALTER TABLE `shop_order`
 DROP COLUMN `score_pay`,
 ADD COLUMN `score_pay` int(20) NULL COMMENT '支付积分' AFTER `company_id`;
+
+
+ALTER TABLE `shop_advertis`
+    ADD COLUMN `page_id` bigint(0) NULL COMMENT '连接页面' AFTER `company_id`;
+
+ALTER TABLE `shop_sku`
+DROP COLUMN `self_price`,
+ADD COLUMN `self_price`  decimal(20,2) NULL AFTER `score_count`;
+
+ALTER TABLE `shop_salesman_grade`
+DROP COLUMN `self_commission`,
+ADD COLUMN `self_commission`  double(20,2) NULL COMMENT '自购返佣比例%' AFTER `company_id`;
\ No newline at end of file
diff --git a/zq-erp/src/main/resources/mybatis/mapper/fenxiao/ShopSalesmanApplyDao.xml b/zq-erp/src/main/resources/mybatis/mapper/fenxiao/ShopSalesmanApplyDao.xml
index 9e7fba3..a4123a9 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/fenxiao/ShopSalesmanApplyDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/fenxiao/ShopSalesmanApplyDao.xml
@@ -72,9 +72,9 @@
 		( SELECT COUNT(*) FROM biz_user
 		WHERE parent_open_id = a.user_id AND is_sales = 1 ) invitedNum,
 		( SELECT IFNULL(sum(IFNULL(amount, 0)), 0) FROM shop_salesman_order
-		WHERE user_id = a.user_id AND order_status = 2 AND sales_user_id = a.user_id ) totalRevenue,
+		WHERE  order_status = 2 AND sales_user_id = a.user_id ) totalRevenue,
 		( SELECT IFNULL(sum(IFNULL(amount, 0)), 0) FROM shop_salesman_order
-		WHERE user_id = a.user_id AND order_status = 1 AND sales_user_id = a.user_id ) balance,
+		WHERE  order_status = 1 AND sales_user_id = a.user_id ) balance,
 		g.NAME grade,
 		a.create_time createTime,
 		a.apply_status applyStatus,
diff --git a/zq-erp/src/main/resources/mybatis/mapper/fenxiao/ShopSalesmanGradeDao.xml b/zq-erp/src/main/resources/mybatis/mapper/fenxiao/ShopSalesmanGradeDao.xml
index 00dd2d4..3b3a30a 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/fenxiao/ShopSalesmanGradeDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/fenxiao/ShopSalesmanGradeDao.xml
@@ -49,6 +49,7 @@
 		SELECT
 			a.id id,
 			a.name name,
+			a.self_commission selfCommission,
 			a.seales_commission sealesCommission,
 			a.invitation_commission invitationCommission,
 			a.grade_condition gradeCondition,
diff --git a/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopAdvertisDao.xml b/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopAdvertisDao.xml
index e8b87b0..b0a7931 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopAdvertisDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopAdvertisDao.xml
@@ -20,6 +20,7 @@
 		<result property="linkType" column="link_type"/>
 		<result property="linkUrl" column="link_url"/>
 		<result property="companyId" column="company_id" />
+		<result property="pageId" column="page_id" />
 	</resultMap>
 	
 	
@@ -38,6 +39,7 @@
 			<result property="remarks" column="remarks" />
 		<result property="linkType" column="link_type"/>
 		<result property="linkUrl" column="link_url"/>
+		<result property="pageId" column="page_id" />
 		<result property="companyId" column="company_id" />
 	</resultMap>
 	
@@ -56,6 +58,7 @@
 			remarks,
 link_type,
 link_url,
+page_id,
             company_id
 	</sql>
 	
@@ -74,6 +77,7 @@
 			#{item.remarks},
 			#{item.linkType},
 			#{item.linkUrl},
+			#{item.pageId},
         #{item.companyId}
 	</sql>
 	
@@ -101,6 +105,9 @@
 			</if>
 			<if test="(record.remarks!=null and record.remarks!='') or  (record.remarks!='' and record.remarks==0)  ">
 				and remarks  = #{record.remarks} 
+			</if>
+			<if test="(record.pageId!=null and record.pageId!='') or  (record.pageId!='' and record.pageId==0)  ">
+				and page_id  = #{record.pageId}
 			</if>
 			 <if test="record.companyId != null and record.companyId !='' ">
 				 and company_id = #{record.companyId}
@@ -167,6 +174,10 @@
 				link_type = #{linkType},
 			</if>
 
+			<if test="_parameter.containsKey('pageId')">
+				page_id = #{pageId},
+			</if>
+
 
 		</set>
 		WHERE id=#{id} 
@@ -206,6 +217,10 @@
 				 company_id = #{record.companyId}
 			</if>
 
+			<if test="record.pageId != null and record.pageId !='' ">
+				page_id = #{record.pageId}
+			</if>
+
 		</set>
 		WHERE id=#{record.id} 
 	</update>
@@ -232,8 +247,8 @@
 		<include refid="where_sql" ></include>
 		</where>
 	</delete>
-	
-	
+
+
 	
 	<!-- 分页查询 -->
 	<select id="selectInPage" resultType="com.matrix.system.shopXcx.bean.ShopAdvertis">
@@ -249,6 +264,7 @@
 		ad.type_id typeId,
 		ad.sort,
 		ad.remarks,
+		       ad.page_id,
 		IFNULL(adType.adt_name ,'无分类') adtName
 		from shop_advertis ad
 		left join shop_advertis_type adType
diff --git a/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopSkuDao.xml b/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopSkuDao.xml
index 7d6030d..13a8e2e 100644
--- a/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopSkuDao.xml
+++ b/zq-erp/src/main/resources/mybatis/mapper/xcxShop/ShopSkuDao.xml
@@ -22,6 +22,7 @@
         <result property="sealCount" column="seal_count"/>
         <result property="stockCode" column="stock_code"/>
         <result property="shopId" column="shop_id"/>
+        <result property="selfPrice" column="self_price"/>
         <result property="sealesPrice" column="seales_price"/>
         <result property="invitationPrice" column="invitation_price"/>
         <result property="scorePrice" column="score_price"/>
@@ -50,6 +51,7 @@
         <result property="sealCount" column="seal_count"/>
         <result property="stockCode" column="stock_code"/>
         <result property="shopId" column="shop_id"/>
+        <result property="selfPrice" column="self_price"/>
         <result property="sealesPrice" column="seales_price"/>
         <result property="invitationPrice" column="invitation_price"/>
         <result property="scorePrice" column="score_price"/>
@@ -75,6 +77,7 @@
 			seal_count,
 			stock_code,
 			shop_id,
+self_price,
 seales_price,
 invitation_price,
         score_price,
@@ -102,6 +105,7 @@
 			#{item.sealCount},
 			#{item.stockCode},
 			#{item.shopId},
+			#{item.selfPrice},
 			#{item.sealesPrice},
 			#{item.invitationPrice},
 			#{item.scorePrice},
@@ -234,6 +238,10 @@
                 score_count = #{scoreCount},
             </if>
 
+            <if test="_parameter.containsKey('selfPrice')">
+                self_price = #{selfPrice},
+            </if>
+
 
         </set>
         WHERE id=#{id}
@@ -293,6 +301,10 @@
                 score_count = #{record.scoreCount},
             </if>
 
+            <if test="record.selfPrice != null ">
+                self_price = #{record.selfPrice},
+            </if>
+
 
         </set>
         WHERE id=#{record.id}
diff --git a/zq-erp/src/main/resources/templates/views/admin/fenxiao/fenxiao-setting.html b/zq-erp/src/main/resources/templates/views/admin/fenxiao/fenxiao-setting.html
index a23b23d..888cad5 100644
--- a/zq-erp/src/main/resources/templates/views/admin/fenxiao/fenxiao-setting.html
+++ b/zq-erp/src/main/resources/templates/views/admin/fenxiao/fenxiao-setting.html
@@ -39,6 +39,22 @@
 
         <el-row style="margin-top: 20px;">
             <el-col>
+                <template v-for="paramSettingzgfy in zgfy">
+                    <el-form-item>
+                        <span slot="label">{{paramSettingzgfy.paramName}}</span>
+                        <el-col>
+                            <el-radio-group v-model="paramSettingzgfy.paramValue">
+                                <el-radio :label="'1'">是</el-radio>
+                                <el-radio :label="'2'">否</el-radio>
+                            </el-radio-group>
+                        </el-col>
+                    </el-form-item >
+                </template>
+            </el-col>
+        </el-row>
+
+        <el-row style="margin-top: 20px;">
+            <el-col>
                 <template v-for="paramSettingTwo in fxms">
                     <el-form-item>
                         <span slot="label">{{paramSettingTwo.paramName}}</span>
@@ -287,6 +303,7 @@
             sqfs:[],
             shfs:[],
             sqtj:[],
+            zgfy:[],
         },
         created: function () {
             this.loadInfo();
@@ -315,6 +332,7 @@
                         _this.fxkg = data.mapInfo.fxkg;
                         _this.fxms = data.mapInfo.fxms;
                         _this.sqfs = data.mapInfo.sqfs;
+                        _this.zgfy = data.mapInfo.zgfy;
                         if(_this.sqfs.length > 0){
                             let paramssqfs = _this.sqfs[0].paramValue;
                             if(paramssqfs == 2){
@@ -444,6 +462,21 @@
                     }
                     submitDate.push(obj);
                 }
+                for (let i = 0; i < _this.zgfy.length; i++) {
+                    let paramSetting = _this.zgfy[i];
+                    let paramCode = paramSetting.paramCode;
+                    let paramValue = paramSetting.paramValue;
+                    let paramValue1 = paramSetting.paramValue1;
+                    let paramValue2 = paramSetting.paramValue2;
+
+                    let obj = {
+                        paramCode: paramCode,
+                        paramValue: paramValue,
+                        paramValue1: paramValue1,
+                        paramValue2: paramValue2,
+                    }
+                    submitDate.push(obj);
+                }
                 for (let i = 0; i < _this.fxms.length; i++) {
                     let paramSetting = _this.fxms[i];
                     let paramCode = paramSetting.paramCode;
diff --git a/zq-erp/src/main/resources/templates/views/admin/fenxiao/fenxiao-user.html b/zq-erp/src/main/resources/templates/views/admin/fenxiao/fenxiao-user.html
index f9966e4..b71fa3c 100644
--- a/zq-erp/src/main/resources/templates/views/admin/fenxiao/fenxiao-user.html
+++ b/zq-erp/src/main/resources/templates/views/admin/fenxiao/fenxiao-user.html
@@ -199,6 +199,13 @@
                             </el-table-column>
                             <el-table-column
                                     prop="sealesCommission"
+                                    label="自购返佣 %">
+                                <template slot-scope="scope">
+                                    <el-input class="edit-input" v-model="scope.row.selfCommission" oninput ="value=value.replace(/[^0-9.]/g,'')" placeholder="自购返佣"></el-input>
+                                </template>
+                            </el-table-column>
+                            <el-table-column
+                                    prop="sealesCommission"
                                     label="推广提成 %">
                                 <template slot-scope="scope">
                                     <el-input class="edit-input" v-model="scope.row.sealesCommission" oninput ="value=value.replace(/[^0-9.]/g,'')" placeholder="推广提成"></el-input>
@@ -474,12 +481,14 @@
                 let id = row.id;
                 let name = row.name;
                 let sealesCommission = row.sealesCommission;
+                let selfCommission = row.selfCommission;
                 let invitationCommission = row.invitationCommission;
                 let gradeCondition = row.gradeCondition;
                 let obj = {
                     id: id,
                     name: name,
                     sealesCommission: sealesCommission,
+                    selfCommission: selfCommission,
                     invitationCommission: invitationCommission,
                     gradeCondition: gradeCondition,
                 }
diff --git a/zq-erp/src/main/resources/templates/views/admin/shop/shopAdvertisType-list.html b/zq-erp/src/main/resources/templates/views/admin/shop/shopAdvertisType-list.html
index ef02fde..911708e 100644
--- a/zq-erp/src/main/resources/templates/views/admin/shop/shopAdvertisType-list.html
+++ b/zq-erp/src/main/resources/templates/views/admin/shop/shopAdvertisType-list.html
@@ -244,7 +244,7 @@
                 <el-table
                         :data="currentNode.ads"
                         :default-sort="{prop: '', order: 'descending'}"
-                        style="width: 100%" max-height="250">
+                        style="width: 100%" >
 
                     <el-table-column
                             label="排序"
diff --git a/zq-erp/src/main/resources/templates/views/admin/shop/shopProduct-form.html b/zq-erp/src/main/resources/templates/views/admin/shop/shopProduct-form.html
index fe12dac..d8ed383 100644
--- a/zq-erp/src/main/resources/templates/views/admin/shop/shopProduct-form.html
+++ b/zq-erp/src/main/resources/templates/views/admin/shop/shopProduct-form.html
@@ -221,6 +221,7 @@
                                     <th>消费可得积分</th>
                                     <th>关联ERP产品</th>
                                     <th>排序</th>
+                                    <th>自购返佣</th>
                                     <th>推广提成</th>
                                     <th>邀请提成</th>
                                     <th>兑换所需金额</th>
@@ -353,6 +354,7 @@
         <input autocomplete="off"   type="hidden" class="form-control" name="erpGoodsCode">
     </div></td>
     <td><input autocomplete="off"   type="text" class="form-control" name=""></td>
+        <td><input autocomplete="off"   type="text" class="form-control" name=""></td>
         <td><input autocomplete="off"   type="text" class="form-control" name=""></td>
         <td><input autocomplete="off"   type="text" class="form-control" name=""></td>
         <td><input autocomplete="off"   type="text" class="form-control" name=""></td>
@@ -528,7 +530,10 @@
             if (goodsName == null || typeof stockCode == 'undefined') {
                 goodsName = "";
             }
-
+            var selfPrice = shopSkus[c].selfPrice;
+            if (selfPrice == null || typeof selfPrice == 'undefined') {
+                selfPrice = "";
+            }
             var sealesPrice = shopSkus[c].sealesPrice;
             if (sealesPrice == null || typeof sealesPrice == 'undefined') {
                 sealesPrice = "";
@@ -559,6 +564,7 @@
                 +'<td><div id="erpNoDiv"><button class="btn btn-info" onclick="selectProduct(\'shopIdValue\',\''+trId+'\')"><i class="fa fa-plus"></i></button>'
                 +'<p class="form-control-static erpGoodsName">'+ goodsName +'</p><input autocomplete="off" class="form-control" type="hidden"  value="'+stockCode+'" name="erpGoodsCode"></div></td>'
                 +'<td><input autocomplete="off"   type="text" class="form-control"  value="'+sort+'" name=""></td>'
+                +'<td><input autocomplete="off"   type="text" class="form-control"  value="'+selfPrice+'" name=""></td>'
                 +'<td><input autocomplete="off"   type="text" class="form-control"  value="'+sealesPrice+'" name=""></td>'
                 +'<td><input autocomplete="off"   type="text" class="form-control"  value="'+invitationPrice+'" name=""></td>'
                 +'<td><input autocomplete="off"   type="text" class="form-control"  value="'+scorePrice+'" name=""></td>'
@@ -745,61 +751,63 @@
             if (i != 0) {
                 var tds = $(this).find("td");
                 var length = tds.length - 1;
-                var id = tds.eq(length - 12).find("input").val();
+                var id = tds.eq(length - 13).find("input").val();
                 if(id == null){
                     id ="";
                 }
                 sku.id = id;
 
                 //规格名称
-                var name = tds.eq(length - 11).find("input").val();
+                var name = tds.eq(length - 12).find("input").val();
                 if(name == null){
                     name = "";
                 }
                 sku.name = name;
 
                 //图片地址
-                var path = tds.eq(length - 10).find("img").attr("src");
+                var path = tds.eq(length - 11).find("img").attr("src");
                 if(path == null){
                     path = "";
                 }
                 sku.imgPath = path;
 
                 //库存
-                var stock = tds.eq(length - 9).find("input").val();
+                var stock = tds.eq(length - 10).find("input").val();
                 if(stock == ""){
                     stock = 0;
                 }
                 sku.stock = stock;
 
                 //价格
-                var price = tds.eq(length -8).find("input").val();
+                var price = tds.eq(length -9).find("input").val();
                 if(price == ""){
                     price =0;
                 }
                 sku.price = price;
 
                 //积分
-                var score = tds.eq(length - 7).find("input").val();
+                var score = tds.eq(length - 8).find("input").val();
                 if(score == ""){
                     score = 0;
                 }
                 sku.score = score;
 
                 //品种编码
-                var stockCode = tds.eq(length - 6).find("input").val();
+                var stockCode = tds.eq(length - 7).find("input").val();
                 if(stockCode == null || typeof stockCode == 'undefined'){
                     stockCode = '';
                 }
                 sku.stockCode = stockCode;
 
                 //排序
-                var sort = tds.eq(length - 5).find("input").val();
+                var sort = tds.eq(length - 6).find("input").val();
                 if(sort == ""){
                     sort = 0;
                 }
                 sku.sort = sort;
-
+                //推广提成
+                var selfPrice = tds.eq(length - 5).find("input").val();
+                sku.selfPrice = selfPrice;
                 //推广提成
                 var sealesPrice = tds.eq(length - 4).find("input").val();
                 sku.sealesPrice = sealesPrice;
@@ -838,20 +846,6 @@
                 var tds = $(this).find("td");
                 var length = tds.length - 1;
 
-                if(ableSales==1){
-                    //推广提成
-                    var sealesPrice = tds.eq(length - 4).find("input").val();
-                    //邀请提成
-                    var invitationPrice = tds.eq(length - 3).find("input").val();
-                    if(sealesPrice == ""||invitationPrice==""){
-                        layer.msg("请填写推广提成和邀请提成",{
-                            icon : 2,
-                            time : 2000
-                        });
-                        flag = true;
-                        return false;
-                    }
-                }
 
                 if(ableScorePay==1){
                     //兑换所需金额
@@ -868,7 +862,7 @@
                     }
                 }
 
-                var name = tds.eq(length - 11).find("input").val();
+                var name = tds.eq(length - 12).find("input").val();
                 if(name == ""){
                     layer.msg("请填写规格名称",{
                         icon : 2,
@@ -886,7 +880,7 @@
                     return false;
                 }
 
-                var stock = tds.eq(length -9).find("input").val();
+                var stock = tds.eq(length -10).find("input").val();
                 if(stock == ""){
                     layer.msg("请填写库存",{
                         icon : 2,
@@ -895,7 +889,7 @@
                     flag = true;
                     return false;
                 }
-                var price = tds.eq(length - 8 ).find("input").val();
+                var price = tds.eq(length - 9 ).find("input").val();
                 if(price == ""){
                     layer.msg("请填写价格",{
                         icon : 2,
diff --git a/zq-erp/src/test/java/com/matrix/SalesOrderTaskTest.java b/zq-erp/src/test/java/com/matrix/SalesOrderTaskTest.java
new file mode 100644
index 0000000..1469566
--- /dev/null
+++ b/zq-erp/src/test/java/com/matrix/SalesOrderTaskTest.java
@@ -0,0 +1,247 @@
+package com.matrix;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.matrix.biz.bean.BizUser;
+import com.matrix.biz.service.BizUserService;
+import com.matrix.core.constance.MatrixConstance;
+import com.matrix.core.tools.LogUtil;
+import com.matrix.core.tools.StringUtils;
+import com.matrix.system.common.bean.BusParameterSettings;
+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.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.shopXcx.bean.ShopOrder;
+import com.matrix.system.shopXcx.bean.ShopOrderDetails;
+import com.matrix.system.shopXcx.bean.ShopProduct;
+import com.matrix.system.shopXcx.bean.ShopSku;
+import com.matrix.system.shopXcx.dao.ShopOrderDao;
+import com.matrix.system.shopXcx.dao.ShopOrderDetailsDao;
+import com.matrix.system.shopXcx.dao.ShopSkuDao;
+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.context.junit4.SpringRunner;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest(classes = {ZqErpApplication.class},webEnvironment =SpringBootTest.WebEnvironment.RANDOM_PORT)
+public class SalesOrderTaskTest {
+	
+
+
+
+    @Autowired
+    ShopOrderDao shopOrderDao;
+    @Autowired
+    ShopOrderDetailsDao shopOrderDetailsDao;
+
+    @Autowired
+    BizUserService bizUserService;
+
+
+    @Autowired
+    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;
+    
+    /**
+     * 处理分销订单
+     * @param order
+     */
+    @Test
+    public void handleExtensionOrder() {
+    	ShopOrder order = new ShopOrder();
+    	order.setUserId("oJkRK4_pWN2kjp75B_G6oGSWawj0");
+    	order.setId(1190);
+    	order.setCompanyId(36L);
+    	
+    	List<ShopOrderDetails> details = new ArrayList<ShopOrderDetails>();
+    	ShopOrderDetails shopOrderDetails = new ShopOrderDetails();
+    	shopOrderDetails.setTotalPrice(new BigDecimal(0.01));
+    	
+    	ShopProduct shopProduct = new ShopProduct();
+    	shopProduct.setAttrValues("测试");
+    	shopProduct.setAbleSales(1);
+    	
+    	ShopSku shopSku = new ShopSku();
+    	shopOrderDetails.setShopSku(shopSku);
+    	shopOrderDetails.setShopProduct(shopProduct);
+    	shopOrderDetails.setCount(1);
+    	details.add(shopOrderDetails);
+    	
+    	order.setDetails(details);
+    	order.setOrderMoney(new BigDecimal(0.01));
+        //判读客户是否存在上级,存在则产生上级的收益
+        BizUser bizUser = bizUserService.findByOpenId(order.getUserId());
+        LogUtil.debug("处理分销订单userOpid={}",bizUser.getOpenId());
+        //判断是否重复生成
+        QueryWrapper queryWrapper=new QueryWrapper();
+        queryWrapper.eq("order_id",order.getId());
+        Integer orderCount = shopSalesmanOrderDao.selectCount(queryWrapper);
+        if(orderCount==0){
+            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(StringUtils.isNotBlank(item.getShopProduct().getAttrValues())
+                        && item.getShopProduct().getAbleSales()==ShopProduct.ABLE_SALES){
+                	orderTotal+=item.getTotalPrice().doubleValue();
+                }
+            }
+            //自购返佣
+            for (ShopOrderDetails item:order.getDetails() ){
+                if(StringUtils.isNotBlank(item.getShopProduct().getAttrValues())
+                        && item.getShopProduct().getAbleSales()==ShopProduct.ABLE_SALES){
+                    //分销规则是否开启自购返佣
+                    BusParameterSettings zgfy = parameterSettingsDao.selectCompanyParamByCode(FenxiaoSettingConstant.FX_ZGFY, bizUser.getCompanyId());
+                    //按分销等级计算
+                    ShopSalesmanGrade shopSalesmanGrade = shopSalesmanGradeDao.selectById(bizUser.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()/orderTotal;
+                selfAmount=selfAmount*zk;
+                salesmanOrder.setAmount(selfAmount);
+                salesmanOrder.setSalesUserId(order.getUserId());
+                shopSalesmanOrderDao.insert(salesmanOrder);
+            }
+            //存在上级
+            if(StringUtils.isNotBlank(bizUser.getParentOpenId())) {
+            	BizUser salesMan=bizUserService.findByOpenId(bizUser.getParentOpenId());
+                Double salesAmount=0D;
+                Double invitationAmount=0D;
+            	BizUser invitationMan=null;
+            	ShopSalesmanOrder invitationOrder=null;
+            	boolean hasInvitationMan=StringUtils.isNotBlank(salesMan.getParentOpenId());
+            	//判断推广员是否还存在上级,存在则计算邀请收益
+            	if(hasInvitationMan){
+            		invitationMan=bizUserService.findByOpenId(salesMan.getParentOpenId());
+            		invitationOrder=new ShopSalesmanOrder();
+            		BeanUtils.copyProperties(salesmanOrder,invitationOrder);
+            		invitationOrder.setSalesUserId(invitationMan.getOpenId());
+            		invitationOrder.setRevenueType(ShopSalesmanOrder.REVENUE_TYPE_INVITATION);
+            	}
+            	//收益计算
+                for (ShopOrderDetails item:order.getDetails() ){
+                    if(StringUtils.isNotBlank(item.getShopProduct().getAttrValues())
+                            && 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()/orderTotal;
+                    salesAmount=salesAmount*zk;
+                    salesmanOrder.setAmount(salesAmount);
+                    salesmanOrder.setSalesUserId(bizUser.getParentOpenId());
+                    shopSalesmanOrderDao.insert(salesmanOrder);
+                }
+                //邀请提成记录
+                if(invitationAmount > 0) {
+                	//整体的优惠金额折算成折扣,* 佣金
+                	invitationAmount=invitationAmount*zk;
+                    invitationOrder.setAmount(invitationAmount);
+                    shopSalesmanOrderDao.insert(invitationOrder);
+                } 
+            }else{
+                LogUtil.debug("不存在父级userOpid={}",bizUser.getOpenId());
+            }
+        }else{
+            LogUtil.debug("重复订单id={}",order.getId());
+        }
+    }
+
+}

--
Gitblit v1.9.1