|
@@ -1,21 +1,12 @@
|
|
|
package com.zhongzheng.modules.wx.service.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
-import cn.hutool.core.convert.Convert;
|
|
|
import cn.hutool.core.lang.Validator;
|
|
|
-import cn.hutool.core.util.StrUtil;
|
|
|
-import cn.hutool.http.HttpStatus;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
-import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
-import com.github.pagehelper.Page;
|
|
|
import com.google.zxing.BarcodeFormat;
|
|
|
import com.google.zxing.client.j2se.MatrixToImageWriter;
|
|
|
import com.google.zxing.common.BitMatrix;
|
|
@@ -23,15 +14,19 @@ import com.google.zxing.qrcode.QRCodeWriter;
|
|
|
import com.zhongzheng.common.config.WxSmallConfig;
|
|
|
import com.zhongzheng.common.core.redis.RedisCache;
|
|
|
import com.zhongzheng.common.exception.CustomException;
|
|
|
-import com.zhongzheng.common.utils.*;
|
|
|
+import com.zhongzheng.common.utils.AES;
|
|
|
+import com.zhongzheng.common.utils.DateUtils;
|
|
|
+import com.zhongzheng.common.utils.ServletUtils;
|
|
|
+import com.zhongzheng.common.utils.ToolsUtils;
|
|
|
import com.zhongzheng.common.utils.http.HttpUtils;
|
|
|
import com.zhongzheng.common.utils.ip.IpUtils;
|
|
|
-import com.zhongzheng.common.utils.polyv.PolyvUtils;
|
|
|
-import com.zhongzheng.common.utils.wxpay.*;
|
|
|
+import com.zhongzheng.common.utils.wxpay.WXPay;
|
|
|
+import com.zhongzheng.common.utils.wxpay.WXPayConstants;
|
|
|
+import com.zhongzheng.common.utils.wxpay.WXPayRequest;
|
|
|
+import com.zhongzheng.common.utils.wxpay.WXPayUtil;
|
|
|
import com.zhongzheng.modules.activity.domain.ActivityOrder;
|
|
|
+import com.zhongzheng.modules.activity.service.IActivityGoodsPriceService;
|
|
|
import com.zhongzheng.modules.activity.service.IActivityOrderService;
|
|
|
-import com.zhongzheng.modules.base.service.IShoppingCartService;
|
|
|
-import com.zhongzheng.modules.course.domain.Course;
|
|
|
import com.zhongzheng.modules.course.domain.CourseBusiness;
|
|
|
import com.zhongzheng.modules.course.domain.CourseEducationType;
|
|
|
import com.zhongzheng.modules.course.domain.CourseProjectType;
|
|
@@ -39,18 +34,15 @@ import com.zhongzheng.modules.course.service.ICourseBusinessService;
|
|
|
import com.zhongzheng.modules.course.service.ICourseEducationTypeService;
|
|
|
import com.zhongzheng.modules.course.service.ICourseProjectTypeService;
|
|
|
import com.zhongzheng.modules.course.service.ICourseService;
|
|
|
-import com.zhongzheng.modules.exam.domain.ExamNumber;
|
|
|
-import com.zhongzheng.modules.exam.service.IExamNoteService;
|
|
|
-
|
|
|
+import com.zhongzheng.modules.distribution.domain.*;
|
|
|
+import com.zhongzheng.modules.distribution.service.*;
|
|
|
import com.zhongzheng.modules.goods.service.IGoodsService;
|
|
|
import com.zhongzheng.modules.goods.vo.GoodsVo;
|
|
|
-import com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo;
|
|
|
import com.zhongzheng.modules.grade.domain.ClassGradeUserTemp;
|
|
|
import com.zhongzheng.modules.grade.domain.StudyCountLog;
|
|
|
import com.zhongzheng.modules.grade.service.IClassGradeUserService;
|
|
|
import com.zhongzheng.modules.grade.service.IClassGradeUserTempService;
|
|
|
import com.zhongzheng.modules.grade.service.IStudyCountLogService;
|
|
|
-import com.zhongzheng.modules.order.bo.OrderGoodsQueryBo;
|
|
|
import com.zhongzheng.modules.order.bo.OrderShareMoneyAddBo;
|
|
|
import com.zhongzheng.modules.order.domain.Order;
|
|
|
import com.zhongzheng.modules.order.domain.OrderGoods;
|
|
@@ -59,31 +51,16 @@ import com.zhongzheng.modules.order.service.IOrderGoodsService;
|
|
|
import com.zhongzheng.modules.order.service.IOrderPayService;
|
|
|
import com.zhongzheng.modules.order.service.IOrderService;
|
|
|
import com.zhongzheng.modules.order.service.IOrderShareMoneyService;
|
|
|
-import com.zhongzheng.modules.order.vo.OrderGoodsVo;
|
|
|
import com.zhongzheng.modules.order.vo.OrderShareGoodsVo;
|
|
|
import com.zhongzheng.modules.order.vo.OrderShareToOldVo;
|
|
|
-import com.zhongzheng.modules.polyv.bo.PolyvVideoAddBo;
|
|
|
-import com.zhongzheng.modules.polyv.bo.PolyvVideoEditBo;
|
|
|
-import com.zhongzheng.modules.polyv.bo.PolyvVideoQueryBo;
|
|
|
-import com.zhongzheng.modules.polyv.domain.PolyvVideDo;
|
|
|
-import com.zhongzheng.modules.polyv.domain.PolyvVideo;
|
|
|
-import com.zhongzheng.modules.polyv.domain.TokenResponse;
|
|
|
-import com.zhongzheng.modules.polyv.mapper.PolyvVideoMapper;
|
|
|
-import com.zhongzheng.modules.polyv.service.IPolyvVideoService;
|
|
|
-import com.zhongzheng.modules.polyv.vo.PolyvVideoQuerVo;
|
|
|
-import com.zhongzheng.modules.polyv.vo.PolyvVideoVo;
|
|
|
import com.zhongzheng.modules.system.service.ISysConfigService;
|
|
|
-import com.zhongzheng.modules.user.bo.OrderPossessUserAddBo;
|
|
|
-import com.zhongzheng.modules.user.bo.UserExamGoodsAddBo;
|
|
|
import com.zhongzheng.modules.user.bo.UserExamGoodsQueryBo;
|
|
|
import com.zhongzheng.modules.user.bo.UserExamGoodsSupplementAddBo;
|
|
|
-import com.zhongzheng.modules.user.domain.User;
|
|
|
import com.zhongzheng.modules.user.domain.UserExamGoods;
|
|
|
import com.zhongzheng.modules.user.service.*;
|
|
|
import com.zhongzheng.modules.user.vo.UserExamGoodsVo;
|
|
|
import com.zhongzheng.modules.user.vo.UserVo;
|
|
|
import com.zhongzheng.modules.wx.service.IWxPayService;
|
|
|
-import com.zhongzheng.modules.wx.vo.WxPayVo;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -92,16 +69,11 @@ import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import javax.annotation.PostConstruct;
|
|
|
-import java.awt.image.BufferedImage;
|
|
|
import java.io.ByteArrayOutputStream;
|
|
|
import java.io.IOException;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
-import java.util.stream.Collectors;
|
|
|
-
|
|
|
-import static com.squareup.okhttp.internal.Util.md5Hex;
|
|
|
|
|
|
/**
|
|
|
* 保利威视频信息Service业务层处理
|
|
@@ -207,6 +179,27 @@ public class WxPayServiceImpl implements IWxPayService {
|
|
|
@Autowired
|
|
|
private IActivityOrderService iActivityOrderService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private IDistributionActivityService iDistributionActivityService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IDistributionActivityGoodsService iDistributionActivityGoodsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IActivityGoodsPriceService iActivityGoodsPriceService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IDistributionLinkService iDistributionLinkService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IDistributionRebateService iDistributionRebateService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IDistributionCashLogService iDistributionCashLogService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private IDistributionSellerService iDistributionSellerService;
|
|
|
+
|
|
|
private String gzh_tokenUrl = "https://api.weixin.qq.com/cgi-bin/token";
|
|
|
|
|
|
private String gzh_tokenParam = "grant_type=client_credential&appid=%s&secret=%s";
|
|
@@ -481,6 +474,10 @@ public class WxPayServiceImpl implements IWxPayService {
|
|
|
updateUserExamGoods(g, order);
|
|
|
//商品是否绑定活动模考
|
|
|
// iUserMockSubscribeService.addActivityMock(g.getGoodsId(),order.getUserId());
|
|
|
+ if (ObjectUtils.isNotNull(g.getDistributionCode())){
|
|
|
+ //分销返利
|
|
|
+ distributionRebate(g);
|
|
|
+ }
|
|
|
}
|
|
|
shareToOldSys(order,goodsList);
|
|
|
}
|
|
@@ -496,6 +493,120 @@ public class WxPayServiceImpl implements IWxPayService {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
+ private void distributionRebate(OrderGoods g) {
|
|
|
+ //分销订单处理
|
|
|
+ DistributionActivity activity = iDistributionActivityService
|
|
|
+ .getOne(new LambdaQueryWrapper<DistributionActivity>()
|
|
|
+ .eq(DistributionActivity::getCode,g.getDistributionCode())
|
|
|
+ .eq(DistributionActivity::getStatus,1));
|
|
|
+ if (ObjectUtils.isNull(activity)){
|
|
|
+ log.error(String.format("分销返佣失败:活动信息获取失败【%s】",g.getDistributionCode()));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ DistributionActivityGoods activityGoods = iDistributionActivityGoodsService
|
|
|
+ .getOne(new LambdaQueryWrapper<DistributionActivityGoods>()
|
|
|
+ .eq(DistributionActivityGoods::getDistributionId, activity.getDistributionId())
|
|
|
+ .eq(DistributionActivityGoods::getGoodsId, g.getGoodsId())
|
|
|
+ .eq(DistributionActivityGoods::getStatus, 1)
|
|
|
+ .last("limit 1"));
|
|
|
+ if (ObjectUtils.isNull(activityGoods)){
|
|
|
+ log.error(String.format("分销返佣失败:活动商品信息获取失败【%s】【goodsId:%s】",g.getDistributionCode(),g.getGoodsId()));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //获取业务员
|
|
|
+ List<DistributionLink> linkList = iDistributionLinkService
|
|
|
+ .list(new LambdaQueryWrapper<DistributionLink>()
|
|
|
+ .eq(DistributionLink::getLinkCode, g.getDistributionLinkCode())
|
|
|
+ .eq(DistributionLink::getDistributionId, activity.getDistributionId())
|
|
|
+ .orderByAsc(DistributionLink::getCreateTime)
|
|
|
+ .last("limit 3"));
|
|
|
+ if (CollectionUtils.isEmpty(linkList)){
|
|
|
+ log.error(String.format("分销返佣失败:活动链条获取失败【%s】【linkCode:%s】",g.getDistributionCode(),g.getDistributionCode()));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //佣金
|
|
|
+ List<BigDecimal> priceList = new ArrayList<>();
|
|
|
+ //比例
|
|
|
+ List<BigDecimal> profitList = new ArrayList<>();
|
|
|
+ switch (activityGoods.getProfitType()){
|
|
|
+ case 1://百分比
|
|
|
+ BigDecimal profitMax = g.getGoodsRealPrice().multiply(activityGoods.getProfitMax());
|
|
|
+ priceList.add(profitMax.multiply(activityGoods.getProfitOne()).setScale(2,BigDecimal.ROUND_HALF_UP));
|
|
|
+ priceList.add(profitMax.multiply(activityGoods.getProfitTwo()).setScale(2,BigDecimal.ROUND_HALF_UP));
|
|
|
+ priceList.add(profitMax.multiply(activityGoods.getProfitThree()).setScale(2,BigDecimal.ROUND_HALF_UP));
|
|
|
+ profitList.add(activityGoods.getProfitOne());
|
|
|
+ profitList.add(activityGoods.getProfitTwo());
|
|
|
+ profitList.add(activityGoods.getProfitThree());
|
|
|
+ break;
|
|
|
+ case 2://固定金额
|
|
|
+ priceList.add(activityGoods.getProfitOne());
|
|
|
+ priceList.add(activityGoods.getProfitTwo());
|
|
|
+ priceList.add(activityGoods.getProfitThree());
|
|
|
+ profitList.add(activityGoods.getProfitOne());
|
|
|
+ profitList.add(activityGoods.getProfitTwo());
|
|
|
+ profitList.add(activityGoods.getProfitThree());
|
|
|
+ break;
|
|
|
+ default :
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ //佣金冻结期是否大于0天
|
|
|
+ Boolean flag = activity.getFreezingPeriod() > 0;
|
|
|
+ for (int i = 0; i < linkList.size(); i++) {
|
|
|
+ DistributionLink linkLink = linkList.get(i);
|
|
|
+ BigDecimal cash = priceList.get(i);
|
|
|
+ //订单
|
|
|
+ DistributionRebate distributionRebate = new DistributionRebate();
|
|
|
+ distributionRebate.setDistributionCode(g.getDistributionCode());
|
|
|
+ distributionRebate.setOrderGoodsId(g.getOrderGoodsId());
|
|
|
+ distributionRebate.setCash(cash);
|
|
|
+ distributionRebate.setSellerId(linkLink.getSellerId());
|
|
|
+ distributionRebate.setSellerLevel(i + 1);
|
|
|
+ distributionRebate.setProfitType(activityGoods.getProfitType());
|
|
|
+ distributionRebate.setProfit(profitList.get(i));
|
|
|
+ distributionRebate.setCreateTime(DateUtils.getNowTime());
|
|
|
+ distributionRebate.setUpdateTime(DateUtils.getNowTime());
|
|
|
+ iDistributionRebateService.save(distributionRebate);
|
|
|
+ //业务员
|
|
|
+ DistributionCashLog cashLog = iDistributionCashLogService
|
|
|
+ .getOne(new LambdaQueryWrapper<DistributionCashLog>()
|
|
|
+ .eq(DistributionCashLog::getSellerId, linkLink.getSellerId())
|
|
|
+ .eq(DistributionCashLog::getRelatedSn, g.getOrderSn())
|
|
|
+ .last("limit 1"));
|
|
|
+ DistributionCashLog log = new DistributionCashLog();
|
|
|
+ if (ObjectUtils.isNotNull(cashLog)){
|
|
|
+ log.setId(cashLog.getId());
|
|
|
+ log.setDiffNum(cashLog.getDiffNum().add(cash));
|
|
|
+ log.setRemark(cashLog.getRemark()+","+String.format("商品【%s】利润【%s】",g.getGoodsId(),cash));
|
|
|
+ }else {
|
|
|
+ log.setDiffNum(cash);
|
|
|
+ log.setRemark(String.format("商品【%s】利润【%s】",g.getGoodsId(),cash));
|
|
|
+ }
|
|
|
+ log.setSellerId(linkLink.getSellerId());
|
|
|
+ //业务员老金额
|
|
|
+ DistributionSeller seller = iDistributionSellerService.getById(linkLink.getSellerId());
|
|
|
+
|
|
|
+ log.setRelatedSn(g.getOrderSn());
|
|
|
+ if (flag){
|
|
|
+ log.setOldNum(ObjectUtils.isNotNull(cashLog) && ObjectUtils.isNotNull(cashLog.getOldNum())?cashLog.getOldNum():seller.getFreezeCash());
|
|
|
+ log.setType(1);
|
|
|
+ log.setNewNum(seller.getFreezeCash().add(cash));
|
|
|
+ seller.setFreezeCash(seller.getFreezeCash().add(cash));
|
|
|
+ }else {
|
|
|
+ log.setOldNum(ObjectUtils.isNotNull(cashLog) && ObjectUtils.isNotNull(cashLog.getOldNum())?cashLog.getOldNum():seller.getCash());
|
|
|
+ log.setType(2);
|
|
|
+ log.setNewNum(seller.getCash().add(cash));
|
|
|
+ seller.setCash(seller.getCash().add(cash));
|
|
|
+ }
|
|
|
+ log.setCreateTime(DateUtils.getNowTime());
|
|
|
+ log.setUpdateTime(DateUtils.getNowTime());
|
|
|
+
|
|
|
+ iDistributionCashLogService.saveOrUpdate(log);
|
|
|
+ //修改业务员金额
|
|
|
+ iDistributionSellerService.updateById(seller);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
//设置服务期
|
|
|
@Override
|
|
|
public OrderGoods setServiceTime(OrderGoods g) {
|