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