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 queryByCondition(XzxUserRedpaperRuleQuery query, String ruleType){ PageHelper.startPage(query.getPage(),query.getLimit()); List list = xzxUserRedpaperRuleDao.queryByCondition(query); PageInfo pageInfo=new PageInfo<>(list); List priceList = new ArrayList<>(); if(ruleType.equals("3")){ for (RedPaperRule rule:list) { if(rule.getPartnerId().equals("-1")){ rule.setPartnerName("管理员"); } XzxUserRedpaperPriceModel model = new XzxUserRedpaperPriceModel(rule); List 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 wl = rebateRuleMapper.queryWtList(rule.getId()+""); model.setProductType(rule.getProductType()); String[] types = rule.getProductType().split(","); List rulePriceList = new ArrayList<>(); for (int i=0;i 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 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 queryRebateList(XzxPlatformCapitalInfoModel model){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); model.setPartnerIds(partnerIds); Map 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 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 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 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 queryRedpaperListStartAndEnd(String startTime,String endTime,String partnerId,Integer id,String ruleType){ return xzxUserRedpaperRuleDao.queryRedpaperListStartAndEnd(startTime,endTime,partnerId,id,ruleType); } public Map queryAccountList(CommissionModel model){ Map 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 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 pageInfo=new PageInfo<>(list); map.put("code",0); map.put("data",pageInfo.getList()); map.put("count",pageInfo.getTotal()); return map; } public List 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; } }