package com.xzx.gc.order.service;
|
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.util.StrUtil;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import com.xzx.gc.common.constant.Constants;
|
import com.xzx.gc.common.constant.UserEnum;
|
import com.xzx.gc.common.utils.DateUtils;
|
import com.xzx.gc.common.utils.RedisUtil;
|
import com.xzx.gc.entity.CityPartner;
|
import com.xzx.gc.entity.PackageGoodsInfo;
|
import com.xzx.gc.entity.RebateRule;
|
import com.xzx.gc.entity.RedPaperRule;
|
import com.xzx.gc.model.admin.*;
|
import com.xzx.gc.model.query.XzxUserRedpaperRuleQuery;
|
import com.xzx.gc.order.mapper.*;
|
import com.xzx.gc.util.DoubleUtil;
|
import org.apache.commons.codec.binary.Base64;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.util.*;
|
|
@Service
|
@Transactional
|
public class RedPaperRuleService {
|
|
|
@Autowired
|
private RedPaperRuleMapper redPaperRuleMapper;
|
|
@Autowired private RedPaperRuleMapper xzxUserRedpaperRuleDao;
|
|
@Autowired private ConfigMapper configMapper;
|
|
@Autowired
|
private CityPartnerService cityPartnerService;
|
|
@Autowired
|
private RebateRuleMapper rebateRuleMapper;
|
|
@Autowired
|
private PackageGoodsInfoService packageGoodsInfoService;
|
|
@Autowired
|
private RebateWeightPriceMapper rebateWeightPriceMapper;
|
|
|
/**
|
* 红包在规则时间范围内是否有效
|
* @param ruleId
|
* @return
|
*/
|
public boolean isvalid( Integer ruleId ){
|
//是否在规则的时间内
|
RedPaperRule redPaperRule = redPaperRuleMapper.selectByPrimaryKey(ruleId);
|
if(redPaperRule==null||Constants.DEL_FLAG==Convert.toInt(redPaperRule.getDelFlag(),1)||Constants.FAIL.equals(Convert.toStr(redPaperRule.getStatus(),"0"))){
|
return false;
|
}
|
Date startTime = DateUtil.parse(redPaperRule.getStartTime(),DateUtils.DATE_FORMAT_YMD);
|
Date endTime = DateUtil.parse(redPaperRule.getEndTime(),DateUtils.DATE_FORMAT_YMD);
|
boolean in = DateUtil.isIn(DateUtil.parse(DateUtil.today(),DateUtils.DATE_FORMAT_YMD), startTime, endTime);
|
return in;
|
}
|
|
|
/**
|
* 获取当前时间内符合条件的一条规则
|
* @return
|
*/
|
public RedPaperRule getOne(String ruleType,String partnerId){
|
if(StrUtil.isBlank(partnerId)){
|
return null;
|
}
|
return redPaperRuleMapper.getOne(DateUtil.format(new Date(),DateUtils.DATE_FORMAT_YMD),ruleType,partnerId);
|
}
|
|
|
/**
|
* 根据打包站和类型查找
|
* @param ruleType
|
* @param packageId
|
* @return
|
*/
|
public RedPaperRule findByPackageIdAndRuleType(String ruleType,String packageId){
|
RedPaperRule redPaperRule=new RedPaperRule();
|
redPaperRule.setStatus(Convert.toShort(Constants.OPEN_FLAG));
|
redPaperRule.setDelFlag(Convert.toShort(Constants.DEL_NOT_FLAG));
|
redPaperRule.setRuleType(ruleType);
|
redPaperRule.setPackageId(packageId);
|
return redPaperRuleMapper.selectOne(redPaperRule);
|
}
|
|
|
|
|
public Map<String,Object> queryByCondition(XzxUserRedpaperRuleQuery query, String ruleType){
|
PageHelper.startPage(query.getPage(),query.getLimit());
|
List<RedPaperRule> list = xzxUserRedpaperRuleDao.queryByCondition(query);
|
PageInfo<RedPaperRule> pageInfo=new PageInfo<>(list);
|
|
List<XzxUserRedpaperPriceModel> priceList = new ArrayList<>();
|
if(ruleType.equals("3")){
|
for (RedPaperRule rule:list) {
|
if(rule.getPartnerId().equals("-1")){
|
rule.setPartnerName("管理员");
|
|
}
|
XzxUserRedpaperPriceModel model = new XzxUserRedpaperPriceModel(rule);
|
List<RebateRule> rulePriceList =xzxUserRedpaperRuleDao.queryRebateRulePriceList(String.valueOf(rule.getId()));
|
model.setRulePriceList(rulePriceList);
|
model.setApplicableObject(rule.getApplicableObject());
|
//文案文字返回
|
String sharingProfitType = rule.getSharingProfitType();
|
if(sharingProfitType!=null){
|
String[] types = sharingProfitType.split(",");
|
StringBuffer typeDesc = new StringBuffer();
|
String aa="";
|
String demo="";
|
for (String type:types) {
|
String desc =configMapper.queryTypeDesc(type);
|
int a=1;
|
for (RebateRule p:rulePriceList) {
|
if(typeDesc.toString()!=null&&!"".equals(typeDesc.toString())){
|
if(type.equals("REBATE_TWO")){
|
if(a>=2){
|
typeDesc.append(";").append(a+"、"+demo).append(p.getWeight()).append("kg,").append(desc).append(p.getRate()).append("%");
|
}else{
|
typeDesc.append(desc).append(p.getRate()).append("%");
|
}
|
|
}else if(type.equals("REBATE_THREE")){
|
aa=desc;
|
}
|
a=a+1;
|
}else{
|
demo=desc;
|
typeDesc.append(a+"、"+desc).append(p.getWeight()).append("kg,");
|
}
|
|
//break;
|
}
|
|
}
|
|
typeDesc.append(",").append((rulePriceList.size()+1)+"、").append(aa).append(model.getConversionPerUnit()).append("kg");
|
model.setTypeDesc(typeDesc.toString());
|
|
}
|
priceList.add(model);
|
|
}
|
}else if(ruleType.equals("8")){
|
for (RedPaperRule rule:list) {
|
XzxUserRedpaperPriceModel model = new XzxUserRedpaperPriceModel(rule);
|
|
StringBuffer typeDesc = new StringBuffer();
|
BigDecimal radio = new BigDecimal(rule.getShareRatio());
|
BigDecimal showRadio = radio.multiply(new BigDecimal("100"));
|
typeDesc.append("城市合伙人每笔订单成交,总部收取每笔订单回收流水的").append(DoubleUtil.subZeroAndDot(showRadio.toString()));
|
typeDesc.append("%,做为平台服务费。");
|
model.setTypeDesc(typeDesc.toString());
|
model.setShareRatio(showRadio.toString());
|
|
//设置合伙人名字
|
String partnerId = model.getPartnerId();
|
if (StrUtil.isNotBlank(partnerId)) {
|
CityPartner byId = cityPartnerService.findById(Convert.toInt(partnerId));
|
if (byId != null) {
|
model.setPartnerName(byId.getPartnerName());
|
}
|
}
|
priceList.add(model);
|
|
}
|
}else{
|
for (RedPaperRule rule:list) {
|
XzxUserRedpaperPriceModel model = new XzxUserRedpaperPriceModel(rule);
|
//文案文字返回
|
String sharingProfitType = rule.getSharingProfitType();
|
model.setApplicableObject(rule.getApplicableObject());
|
if(ruleType.equals("2")){
|
if(sharingProfitType!=null){
|
String[] types = sharingProfitType.split(",");
|
StringBuffer typeDesc = new StringBuffer();
|
for (String type:types) {
|
String desc =configMapper.queryTypeDesc(type);
|
if(typeDesc.toString()!=null&&!"".equals(typeDesc.toString())){
|
typeDesc.append(",").append(desc);
|
}else{
|
if(type.equals("SHARE_RATIO")){
|
typeDesc.append(desc).append(model.getShareRatio()).append("%");
|
}else{
|
typeDesc.append(desc);
|
}
|
}
|
}
|
model.setTypeDesc(typeDesc.toString());
|
}
|
}else{
|
if(ruleType.equals("5")){
|
StringBuffer str = new StringBuffer();
|
List<RebateRule> wl = rebateRuleMapper.queryWtList(rule.getId()+"");
|
model.setProductType(rule.getProductType());
|
String[] types = rule.getProductType().split(",");
|
List<RebateRule> rulePriceList = new ArrayList<>();
|
for (int i=0;i<wl.size();i++) {
|
RebateRule ww = wl.get(i);
|
rulePriceList.add(ww);
|
str.append(i+1).append("、用户每次下单超过").append(ww.getWeight()).append("kg,返利").append(ww.getRate().split(",")[0]+"%;");
|
}
|
model.setRulePriceList(rulePriceList);
|
str.append((wl.size()+1));
|
str.append("、适用物品包括:");
|
for (String t:types) {
|
if(t.equals("1")){
|
str.append("废纸").append(",");
|
}else if(t.equals("2")){
|
str.append("杂纸").append(",");
|
}
|
}
|
model.setTypeDesc(str.toString());
|
}else if(ruleType.equals(UserEnum.提成规则.getValue())){
|
StringBuffer str = new StringBuffer();
|
String packageId = rule.getPackageId();
|
CityPartner partner =cityPartnerService.queryById(packageId);
|
str.append(partner.getPartnerName()).append("的发放规则");
|
str.append("1、回收员每次成交,合伙人给回收员发放提成,提成为");
|
List<RebateWeightPriceModel> itemList = rebateWeightPriceMapper.queryOldItemList(rule.getId()+"");
|
for (RebateWeightPriceModel mm:itemList) {
|
PackageGoodsInfo packageGoodsInfo = packageGoodsInfoService.findByPackageIdAndItemTypeForBidden(mm.getPackageId(), mm.getProductType());
|
String title = packageGoodsInfo.getTitle();
|
mm.setProductName(title);
|
str.append(title).append(":").append(mm.getMoney()).append("元/公斤,");
|
|
}
|
model.setRoyaltyRuleList(itemList);
|
String rType = rule.getProductType();
|
if(null!=rType){
|
String[] itemType = rType.split(",");
|
if(itemType[0].equals("3")){
|
str.append("2、可以人工结算提成;");
|
}
|
if(itemType[0].equals("4")){
|
String timming = rule.getTiming();
|
String[] trs = timming.split(",");
|
str.append("3、每周").append(trs[0]).append(" ").append(trs[1]).append("点系统自动结算提成");
|
}
|
}
|
model.setTypeDesc(str.toString());
|
}else{
|
StringBuffer str = new StringBuffer();
|
if(model.getIssuanceRules().equals("0")){
|
double totald = Double.parseDouble(model.getAmount())*100;
|
long total =new Double(totald).longValue();
|
int count = Integer.parseInt(model.getRedEnvelopesNum());
|
long average = total / count;
|
String[] pri = model.getRandomAmountAverage().split(",");
|
str.append("1、发放金额随机,金额范围为").append(model.getRandomAmountAverage()).append("元;平均为").append(average).append("元");
|
str.append("总额为").append(model.getAmount()).append("元,随机分配;最高").append(pri[1]).append("元/个");
|
}else{
|
str.append("发放固定金额,红包为").append(model.getRandomAmountAverage()).append(",总额为").append(model.getAmount());
|
}
|
model.setTypeDesc(str.toString());
|
}
|
|
}
|
priceList.add(model);
|
|
}
|
}
|
Map<String,Object> map = new HashMap<>();
|
map.put("data",priceList);
|
map.put("pageNumber",pageInfo.getPageNum());
|
map.put("pageSize",pageInfo.getPageSize());
|
map.put("totalPage",pageInfo.getPages());
|
map.put("count",pageInfo.getTotal());
|
//queryListAfter(priceList);
|
|
return map;
|
}
|
|
public void deleteByRuleId(Integer ruleId){
|
xzxUserRedpaperRuleDao.deleteByRuleId(ruleId);
|
}
|
public Map<String,Object> queryRebateList(XzxPlatformCapitalInfoModel model){
|
|
List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();
|
model.setPartnerIds(partnerIds);
|
Map<String,Object> map = new HashMap<>();
|
String mobilePhone = model.getMobilePhone();
|
if(!StringUtils.isEmpty(model.getMobilePhone())){
|
model.setMobilePhone(mobilePhone);
|
model.setNickName(new String(Base64.encodeBase64(mobilePhone.getBytes())));
|
|
}
|
PageHelper.startPage(model.getPage(),model.getLimit());
|
List<XzxPlatformCapitalInfoModel> list = xzxUserRedpaperRuleDao.queryRebateList(model);
|
|
for (XzxPlatformCapitalInfoModel info:list) {
|
if(info.getUserId()!=null&&!"".equals(info.getUserId())){
|
//转昵称
|
String nickName = info.getNickName();
|
if(nickName!=null&&!"".equals(nickName)){
|
nickName = cn.hutool.core.codec.Base64.decodeStr(nickName);
|
}
|
info.setNickName(nickName);
|
//查询用户此单之前的累计重量
|
String afterWeight = "0" ;
|
String userId = info.getUserId();
|
String completeTime = info.getCreateTime();
|
List<String> orderIds = xzxUserRedpaperRuleDao.queryUserOrderIds(completeTime,userId);
|
if(orderIds!=null&&orderIds.size()>0){
|
afterWeight = xzxUserRedpaperRuleDao.queryAfterWeightByOrderIds(orderIds);
|
}
|
info.setAfterWeight(DoubleUtil.roundThree(afterWeight));
|
info.setDesignatedWeight(DoubleUtil.roundThree(info.getDesignatedWeight()));
|
}
|
|
}
|
//如果没有用户Id,则不显示返利列表
|
if(list.size()==0){
|
list = new ArrayList<>();
|
}
|
|
PageInfo<XzxPlatformCapitalInfoModel> pageInfo=new PageInfo<>(list);
|
String totalAmount =xzxUserRedpaperRuleDao.queryTotalAmountByParam(model);
|
|
map.put("data",list);
|
map.put("count",pageInfo.getTotal());
|
map.put("code",0);
|
map.put("orderNum",pageInfo.getTotal());
|
if(null!=totalAmount&&!"".equals(totalAmount)){
|
map.put("totalAmount",DoubleUtil.roundTwo(totalAmount));
|
|
}else{
|
map.put("totalAmount","0");
|
}
|
return map;
|
}
|
|
public List<RedPaperRule> queryRedpaperListStartAndEnd(String startTime,String endTime,String partnerId,Integer id,String ruleType){
|
return xzxUserRedpaperRuleDao.queryRedpaperListStartAndEnd(startTime,endTime,partnerId,id,ruleType);
|
}
|
|
public Map<String,Object> queryAccountList(CommissionModel model){
|
Map<String,Object> map = new HashMap<>();
|
String partnerName = model.getPartnerName();
|
if(!StringUtils.isEmpty(partnerName)){
|
model.setPartnerName(partnerName);
|
model.setMobile(partnerName);
|
}
|
int count = 0;
|
PageHelper.startPage(model.getPage(),model.getLimit());
|
List<CommissionModel> list = xzxUserRedpaperRuleDao.queryAccountList(model);
|
for (CommissionModel cmodel:list) {
|
cmodel.setOrderMoney(DoubleUtil.roundTwo(cmodel.getOrderMoney()));
|
}
|
//已提佣次数
|
map.put("commissionNum",count);
|
//总提佣金额
|
String totalMoney =xzxUserRedpaperRuleDao.queryTotalCommissionMoney(model);
|
if(null!=totalMoney&&!"".equals(totalMoney)){
|
map.put("totalMoney",DoubleUtil.roundTwo(totalMoney));
|
}else{
|
map.put("totalMoney","0.00");
|
}
|
PageInfo<CommissionModel> pageInfo=new PageInfo<>(list);
|
map.put("code",0);
|
map.put("data",pageInfo.getList());
|
map.put("count",pageInfo.getTotal());
|
return map;
|
}
|
|
public List<RedPaperRule> queryRoyalRuleList(String partnerId,String packageId){
|
return xzxUserRedpaperRuleDao.queryRoyalRuleList(partnerId,packageId);
|
}
|
|
public RedPaperRule queryById(Integer id) {
|
return xzxUserRedpaperRuleDao.selectByPrimaryKey(id);
|
}
|
|
public boolean update(RedPaperRule ru) {
|
return xzxUserRedpaperRuleDao.updateByPrimaryKeySelective(ru)>0?true:false;
|
}
|
|
public boolean save(RedPaperRule rule) {
|
return xzxUserRedpaperRuleDao.insertUseGeneratedKeys(rule)>0?true:false;
|
}
|
|
}
|