package com.xzx.gc.order.service;
|
|
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.codec.Base64;
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.convert.Convert;
|
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.format.FastDateFormat;
|
import cn.hutool.core.lang.Snowflake;
|
import cn.hutool.core.util.IdUtil;
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
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.exception.RestException;
|
import com.xzx.gc.common.utils.ExceptionUtils;
|
import com.xzx.gc.common.utils.RedisUtil;
|
import com.xzx.gc.entity.*;
|
import com.xzx.gc.model.JsonResult;
|
import com.xzx.gc.model.admin.*;
|
import com.xzx.gc.model.comon.account.AllAcountParamDto;
|
import com.xzx.gc.order.mapper.PlatformAccountLogMapper;
|
import com.xzx.gc.order.mapper.RedPaperMapper;
|
import com.xzx.gc.service.AccountContext;
|
import com.xzx.gc.util.DoubleUtil;
|
import com.xzx.gc.util.SessionUtil;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.*;
|
|
@Service
|
@Transactional
|
public class RedPaperService {
|
|
|
@Autowired
|
private RedPaperMapper redPaperMapper;
|
|
@Autowired
|
private RedisUtil redisUtil;
|
|
|
@Autowired
|
private CityPartnerService cityPartnerService;
|
|
@Autowired
|
private RedpaperRebateService redpaperRebateService;
|
|
@Autowired
|
private PlatformAccountLogMapper platformAccountLogMapper;
|
|
@Autowired
|
private RedPaperRuleService redPaperRuleService;
|
@Autowired
|
private SessionUtil sessionUtil;
|
@Autowired
|
private RebateRuleService rebateRuleService;
|
|
public RedPaper getOne(Integer ruleId){
|
return redPaperMapper.getOne(ruleId);
|
}
|
|
/**
|
* 领取红包
|
* @param ruleId 规则id
|
* @param userId 领取红包的用户Id
|
*/
|
public RedPaper get(String ruleId,String userId){
|
boolean lock=false;
|
try {
|
if(redisUtil.setnx(Constants.REDIS_USER_KEY+"redpaper:"+userId,ruleId)){
|
lock=true;
|
AllAcountParamDto allAcountParamDto=AllAcountParamDto.builder().type(7).ruleId(ruleId).userId(userId).
|
build();
|
// return (RedPaper) accountFactory.getService(7).account(allAcountParamDto);
|
return (RedPaper) new AccountContext(redpaperRebateService).account(allAcountParamDto);
|
}
|
}catch (RestException e){
|
throw e;
|
}catch (Exception e){
|
ExceptionUtils.err("领取红包失败",e);
|
}finally {
|
if(lock){
|
redisUtil.del(Constants.REDIS_USER_KEY+"redpaper:"+userId);
|
}
|
}
|
return null;
|
}
|
|
|
/**
|
* 检验用户是否在此规则下已领取过红包
|
* @param userId
|
* @param ruleId
|
* @return
|
*/
|
public boolean checkIsReceive(String userId,Integer ruleId){
|
RedPaper redPaper=new RedPaper();
|
redPaper.setReceiveUserId(userId);
|
redPaper.setRuleId(ruleId);
|
redPaper.setReceiveFlag(Convert.toShort(UserEnum.红包已领取.getValue()));
|
int i = redPaperMapper.selectCount(redPaper);
|
if(i>0){
|
return true;
|
}
|
return false;
|
}
|
|
|
|
|
|
|
|
public String cancelRedPaper(CityPartner partner, String type){
|
String day = DateUtil.now();
|
Snowflake snowflake = IdUtil.getSnowflake(0, 3);
|
String payOrderId = "ZF"+snowflake.nextIdStr();
|
if(null!=partner){
|
//合伙人退还红包
|
//判断红包有效时间是否已经截止
|
RedPaperRule rule = redPaperMapper.queryRuleByDay(Long.parseLong(partner.getId()+""),day,type);
|
if(null!=rule){
|
//查询规则未领完的红包金额
|
String redMoney = queryMoneyByRuleId(rule.getId()+"");
|
BigDecimal rd = new BigDecimal(redMoney);
|
if(rd.compareTo(BigDecimal.ZERO)==0){
|
return "合伙人的红包已经领完,不能退还!";
|
}else{
|
PartnerAccountModel partnerAccountModel = cityPartnerService.queryAccountIdByUserId(partner.getUserId());
|
UserAccountModel userAccountModel1 = cityPartnerService.queryPartnerAccountByUserId(partner.getUserId());
|
BigDecimal hbb = new BigDecimal(partnerAccountModel.getHbb()).add(new BigDecimal(redMoney));
|
//先写日志 UserAccountModel accountModel, String type, BigDecimal money, String payOrderId
|
cityPartnerService.insertAccountLogByPartner(userAccountModel1,"5",new BigDecimal(redMoney),payOrderId);
|
cityPartnerService.insertPartnerLogByPartner(partnerAccountModel,"8",redMoney,payOrderId,partner,DoubleUtil.roundTwo(hbb.toString()));
|
//修改合伙人环保币
|
partnerAccountModel.setHbb(DoubleUtil.roundTwo(hbb.toString()));
|
cityPartnerService.updatePartnerAccount(partnerAccountModel);
|
UserAccountModel userAccountModel = new UserAccountModel();
|
userAccountModel.setUserId(partner.getUserId());
|
userAccountModel.setMoney(Double.valueOf(DoubleUtil.roundTwo(hbb.toString())));
|
cityPartnerService.updateAccountPartner(userAccountModel);
|
redPaperMapper.deletePaperByRuleId(rule.getId());
|
}
|
}else{
|
rule = redPaperMapper.queryRuleByDay(Long.parseLong(partner.getId()+""),null,type);
|
String endTime =rule.getEndTime();
|
if(null!=endTime&&!"".equals(endTime)){
|
String[] times = endTime.split("-");
|
return "请在红包结束时间"+times[0]+"年"+times[1]+"月"+times[2]+"日之后进行操作";
|
}else{
|
return "没有规则,无法退红包!";
|
}
|
}
|
}else{
|
//平台管理员退还红包
|
RedPaperRule rule = redPaperMapper.queryRuleByDay(null,day,type);
|
if(null!=rule){
|
String redMoney = queryMoneyByRuleId(rule.getId()+"");
|
BigDecimal rd = new BigDecimal(redMoney);
|
if(rd.compareTo(BigDecimal.ZERO)==0){
|
return "平台的红包已经领完,不能退还!";
|
}else{
|
String acc = cityPartnerService.queryAccountByAdminId();
|
String[] accArr = acc.split(",");
|
String oldMoney = accArr[1];
|
String oldHbb = accArr[2];
|
BigDecimal newMoney = new BigDecimal(oldMoney).add(new BigDecimal(redMoney));
|
updateAdminAccount(redMoney,"0",oldHbb,oldMoney,oldHbb,DoubleUtil.roundTwo(newMoney.toString()),null,payOrderId);
|
cityPartnerService.updatePlatformMoney(DoubleUtil.roundTwo(newMoney.toString()));
|
redPaperMapper.deletePaperByRuleId(rule.getId());
|
}
|
}else{
|
rule = redPaperMapper.queryRuleByDay(null,null,type);
|
String endTime =rule.getEndTime();
|
if(null!=endTime&&!"".equals(endTime)){
|
String[] times = endTime.split("-");
|
return "请在红包结束时间"+times[0]+"年"+times[1]+"月"+times[2]+"日之后进行操作";
|
}else{
|
return "没有规则,无法退红包!";
|
}
|
}
|
}
|
return null;
|
}
|
|
public String queryMoneyByRuleId(String ruleId){
|
return redPaperMapper.queryMoneyByRuleId(ruleId);
|
}
|
private void updateAdminAccount(String money,String hbb,String oldHbb,String oldMoney,String newHbb,String newMoney,CityPartner partner,String payOrderId){
|
CoreUser user = sessionUtil.getCurrentUser();
|
PlatformAccountLogModel platformAccountLogModel = new PlatformAccountLogModel();
|
platformAccountLogModel.setCreateTime(DateUtil.now());
|
platformAccountLogModel.setCreateUserId(user.getId()+"");
|
platformAccountLogModel.setMoney(money);
|
platformAccountLogModel.setHbb(hbb);
|
platformAccountLogModel.setOldHbb(oldHbb);
|
platformAccountLogModel.setOldMoney(oldMoney);
|
platformAccountLogModel.setNewHbb(newHbb);
|
platformAccountLogModel.setNewMoney(newMoney);
|
if(null!=partner){
|
platformAccountLogModel.setCreateUserName(partner.getPartnerName());
|
platformAccountLogModel.setCreateUserMobile(partner.getMobilePhone());
|
}else{
|
platformAccountLogModel.setCreateUserName(user.getName());
|
platformAccountLogModel.setCreateUserMobile("-");
|
}
|
platformAccountLogModel.setCreateUserType("2");
|
platformAccountLogModel.setFlowNo(payOrderId);
|
platformAccountLogMapper.insertPlatFormLog(platformAccountLogModel);
|
}
|
public Map<String,Object> redPaperList(XzxUserRedpaperInfoModel model){
|
List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();
|
model.setPartnerIds(partnerIds);
|
Map<String,Object> map = new HashMap<>();
|
PageHelper.startPage(model.getPage(),model.getLimit());
|
List<XzxUserRedpaperInfoModel> list = redPaperMapper.redPaperList(model);
|
for (XzxUserRedpaperInfoModel resultModel:list) {
|
String name = resultModel.getName();
|
if(name!=null&&!"".equals(name)){
|
name =Base64.decodeStr(name);
|
}
|
resultModel.setName(name);
|
}
|
PageInfo<XzxUserRedpaperInfoModel> pageInfo=new PageInfo<>(list);
|
Map<String,Object> totalmap = redPaperMapper.redPaperTotal(model);
|
map.put("data",pageInfo.getList());
|
map.put("count",pageInfo.getTotal());
|
map.put("code",0);
|
map.put("redPaperTotalNum",totalmap.get("count"));
|
if(totalmap.get("money")!=null){
|
map.put("redPaperTotalMoney",totalmap.get("money"));
|
}else{
|
map.put("redPaperTotalMoney","0");
|
}
|
return map;
|
}
|
|
public void batchInsertPaperInfo(List<RedPaper> list){
|
redPaperMapper.batchInsertPaperInfo(list);
|
}
|
|
|
public String subPartnerAccount(String amount){
|
List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();
|
Snowflake snowflake = IdUtil.getSnowflake(0, 3);
|
String payOrderId = "ZF"+snowflake.nextIdStr();
|
if(null!=partnerIds&&partnerIds.size()>0){
|
PartnerAccountModel partnerAccount = new PartnerAccountModel();
|
CityPartner partner = cityPartnerService.queryById(partnerIds.get(0));
|
partnerAccount = cityPartnerService.queryAccountIdByUserId(partner.getUserId());
|
BigDecimal pHbb = new BigDecimal(partnerAccount.getHbb());
|
BigDecimal subHbb = pHbb.subtract(new BigDecimal(amount));
|
if(subHbb.compareTo(BigDecimal.ZERO)==-1){
|
return "合伙人的余额为:"+partnerAccount.getHbb()+",不足以发红包金额:"+amount+",请充值环保币!";
|
}
|
//UserAccountModel userAccount = cityPatrnerService.queryPartnerAccountByUserId(partner.getUserId());
|
cityPartnerService.insertPartnerAccountLog(partnerAccount,"5",new BigDecimal(amount),payOrderId,"8");
|
//userAccount.setMoney(Double.valueOf(DoubleUtil.roundTwo(subHbb.toString())));
|
//cityPatrnerService.updateAccountPartner(userAccount);
|
partnerAccount.setHbb(DoubleUtil.roundTwo(subHbb.toString()));
|
cityPartnerService.updatePartnerAccount(partnerAccount);
|
}else{
|
String acc = cityPartnerService.queryAccountByAdminId();
|
String[] accArr = acc.split(",");
|
String adminMoney = accArr[1];
|
String adminhbb = accArr[2];
|
//平台
|
BigDecimal oldAdminhbb = new BigDecimal(adminhbb);
|
//平台账户处理红包
|
BigDecimal newAdminhbb = oldAdminhbb.subtract(new BigDecimal(amount));
|
cityPartnerService.updatePlatformHbb(DoubleUtil.roundTwo(newAdminhbb.toString()));
|
PlatformAccountLogModel platformAccountLogModel = new PlatformAccountLogModel();
|
platformAccountLogModel.setCreateTime(DateUtil.now());
|
platformAccountLogModel.setCreateUserId("1");
|
platformAccountLogModel.setMoney(DoubleUtil.roundTwo("0"));
|
platformAccountLogModel.setHbb("-" + DoubleUtil.roundTwo(amount));
|
platformAccountLogModel.setOldHbb(DoubleUtil.roundTwo(adminhbb));
|
platformAccountLogModel.setOldMoney(DoubleUtil.roundTwo(adminMoney));
|
platformAccountLogModel.setNewHbb(DoubleUtil.roundTwo(newAdminhbb.toString()));
|
platformAccountLogModel.setNewMoney(DoubleUtil.roundTwo(adminMoney));
|
platformAccountLogModel.setCreateUserName("平台管理员");
|
platformAccountLogModel.setCreateUserType("2");
|
platformAccountLogModel.setCreateUserMobile("--");
|
platformAccountLogModel.setFlowNo(payOrderId);
|
cityPartnerService.insertPlatFormLog(platformAccountLogModel);
|
}
|
return null;
|
}
|
|
public String cancelRedPaper1(CityPartner partner,String type){
|
String day = DateUtil.now();
|
Snowflake snowflake = IdUtil.getSnowflake(0, 3);
|
String payOrderId = "ZF"+snowflake.nextIdStr();
|
|
if(null!=partner){
|
RedPaperRule rule = redPaperMapper.queryRuleByDay(Long.parseLong(partner.getId()+""),day,type);
|
|
if(null!=rule){
|
//查询规则未领完的红包金额
|
String redMoney = queryMoneyByRuleId(rule.getId()+"");
|
BigDecimal rd = new BigDecimal(redMoney);
|
if(rd.compareTo(BigDecimal.ZERO)==0){
|
return null;
|
}else {
|
PartnerAccountModel partnerAccountModel = cityPartnerService.queryAccountIdByUserId(partner.getUserId());
|
UserAccountModel userAccountModel1 = cityPartnerService.queryPartnerAccountByUserId(partner.getUserId());
|
BigDecimal hbb = new BigDecimal(partnerAccountModel.getHbb()).add(new BigDecimal(redMoney));
|
//先写日志 UserAccountModel accountModel, String type, BigDecimal money, String payOrderId
|
cityPartnerService.insertAccountLogByPartner(userAccountModel1, "5", new BigDecimal(redMoney), payOrderId);
|
cityPartnerService.insertPartnerLogByPartner(partnerAccountModel, "8", redMoney, payOrderId, partner, DoubleUtil.roundTwo(hbb.toString()));
|
//修改合伙人环保币
|
partnerAccountModel.setHbb(DoubleUtil.roundTwo(hbb.toString()));
|
cityPartnerService.updatePartnerAccount(partnerAccountModel);
|
UserAccountModel userAccountModel = new UserAccountModel();
|
userAccountModel.setUserId(partner.getUserId());
|
userAccountModel.setMoney(Double.valueOf(DoubleUtil.roundTwo(hbb.toString())));
|
cityPartnerService.updateAccountPartner(userAccountModel);
|
}
|
}else{
|
rule = redPaperMapper.queryRuleByDay(Long.parseLong(partner.getId()+""),null,type);
|
String endTime =rule.getEndTime();
|
if(null!=endTime&&!"".equals(endTime)){
|
String[] times = endTime.split("-");
|
return "请在红包结束时间"+times[0]+"年"+times[1]+"月"+times[2]+"日之后进行操作";
|
}else{
|
return "没有规则,无法退红包!";
|
}
|
}
|
}else{
|
RedPaperRule rule = redPaperMapper.queryRuleByDay(null,day,type);
|
if(null!=rule){
|
String redMoney = queryMoneyByRuleId(rule.getId()+"");
|
BigDecimal rd = new BigDecimal(redMoney);
|
if(rd.compareTo(BigDecimal.ZERO)==0){
|
return null;
|
}else{
|
String acc = cityPartnerService.queryAccountByAdminId();
|
String[] accArr = acc.split(",");
|
String oldMoney = accArr[1];
|
String oldHbb = accArr[2];
|
BigDecimal newMoney = new BigDecimal(oldMoney).add(new BigDecimal(redMoney));
|
updateAdminAccount(redMoney,"0",oldHbb,oldMoney,oldHbb,DoubleUtil.roundTwo(newMoney.toString()),null,payOrderId);
|
cityPartnerService.updatePlatformMoney(DoubleUtil.roundTwo(newMoney.toString()));
|
}
|
}else{
|
rule = redPaperMapper.queryRuleByDay(null,null,type);
|
String endTime =rule.getEndTime();
|
if(null!=endTime&&!"".equals(endTime)){
|
String[] times = endTime.split("-");
|
return "请在红包结束时间"+times[0]+"年"+times[1]+"月"+times[2]+"日之后进行操作";
|
}else{
|
return "没有规则,无法退红包!";
|
}
|
}
|
}
|
return null;
|
}
|
|
public void deleteJtRuleId(Integer ruleId){
|
redPaperMapper.deleteJtRuleId(ruleId);
|
}
|
public void deletePaperByRuleId(Integer ruleId){
|
redPaperMapper.deletePaperByRuleId(ruleId);
|
}
|
|
|
/**
|
* 添加红包规则
|
* @return
|
*/
|
public JsonResult updateRedPaper(Map<String, Object> map){
|
ObjectMapper objectMapper1 = new ObjectMapper();
|
objectMapper1.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
XzxUserRedpaperRuleModel model = objectMapper1.convertValue(map, XzxUserRedpaperRuleModel.class);
|
|
|
//检查合伙人账户
|
model.setRuleType(UserEnum.红包规则.getValue());
|
checkPartnerAccountByRule(model);
|
//检查规则时间是否交叉
|
checkRuleTime(model,UserEnum.红包规则.getValue());
|
|
RedPaperRule ru = redPaperRuleService.queryById(model.getId());
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
RedPaperRule rule = objectMapper.convertValue(model, RedPaperRule.class);
|
rule.setUpdateTime(cn.hutool.core.date.DateUtil.now());
|
rule.setDelFlag((short) 0);
|
rule.setRuleType("1");
|
rule.setSharingProfitType("REDPAPER_TEXT");
|
rule.setId(ru.getId());
|
redPaperRuleService.update(rule);
|
return JsonResult.success(rule.getId());
|
|
}
|
|
|
/**
|
* 修改阶梯或重量返利
|
* @param map
|
* @return
|
*/
|
public JsonResult updateRebateRule(Map<String, Object> map){
|
List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();
|
if(CollUtil.isEmpty(partnerIds)){
|
throw new RestException("非法操作");
|
}
|
ObjectMapper objectMapper1 = new ObjectMapper();
|
objectMapper1.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
XzxUserRedpaperRuleModel model = objectMapper1.convertValue(map, XzxUserRedpaperRuleModel.class);
|
RedPaperRule rule = redPaperRuleService.queryById(model.getId());
|
|
//检查时间交叉
|
XzxUserRedpaperRuleModel xzxUserRedpaperRuleModel=new XzxUserRedpaperRuleModel();
|
BeanUtil.copyProperties(rule,xzxUserRedpaperRuleModel);
|
checkRuleTime(xzxUserRedpaperRuleModel,xzxUserRedpaperRuleModel.getRuleType());
|
|
String compareType=null;
|
if(UserEnum.重量返利规则.getValue().equals(rule.getRuleType())){
|
compareType=UserEnum.阶梯返利规则.getValue();
|
}else if(UserEnum.阶梯返利规则.getValue().equals(rule.getRuleType())){
|
compareType=UserEnum.重量返利规则.getValue();
|
}
|
try {
|
xzxUserRedpaperRuleModel.setId(null);
|
checkRuleTime(xzxUserRedpaperRuleModel,compareType);
|
} catch (RestException e) {
|
return JsonResult.failMessage("阶梯返利规则和重量返利不能同时开启");
|
}
|
|
|
|
List<RebateRule> rulePriceList = model.getRulePriceList();
|
if (rule.getRuleType().equals("5")) {
|
rulePriceList = model.getWeightRateList();
|
}
|
List<String> priceList = new ArrayList<>();
|
for (int i = 0; i < rulePriceList.size(); i++) {
|
priceList.add(rulePriceList.get(i).getRate());
|
}
|
boolean bool = com.xzx.gc.util.DateUtil.isSorted(priceList, priceList.size());
|
if (!bool) {
|
return JsonResult.failMessage("阶梯价格必须按顺序排列");
|
}
|
rule.setConversionPerUnit(model.getConversionPerUnit());
|
rule.setStartTime(model.getStartTime());
|
rule.setEndTime(model.getEndTime());
|
if (rule.getRuleType().equals("5")) {
|
rule.setRuleName("重量规则返利");
|
rule.setRuleType("5");
|
if (null != model.getProductType() && !"".equals(model.getProductType())) {
|
rule.setProductType(model.getProductType());
|
}
|
|
} else {
|
rule.setRuleName("阶梯价格规则");
|
rule.setRuleType("3");
|
}
|
rule.setCreateTime(cn.hutool.core.date.DateUtil.now());
|
rule.setDelFlag((short) 0);
|
rule.setStatus(model.getStatus());
|
rule.setConversionPerUnitFlag(model.getConversionPerUnitFlag());
|
redPaperRuleService.update(rule);
|
|
if (rule.getId() != null) {
|
//删除原有阶梯
|
redPaperRuleService.deleteByRuleId(rule.getId());
|
for (int i = 0; i < rulePriceList.size(); i++) {
|
RebateRule rulePrice = rulePriceList.get(i);
|
rulePrice.setId(null);
|
rulePrice.setCreateTime(cn.hutool.core.date.DateUtil.now());
|
rulePrice.setRuleId(Long.parseLong(rule.getId() + ""));
|
rulePrice.setSort(String.valueOf(i + 1));
|
rulePrice.setDelFlag((short) 0);
|
rebateRuleService.save(rulePrice);
|
}
|
}
|
|
return JsonResult.success(rule.getId());
|
}
|
|
|
/**
|
* 检查规则时间
|
* @param model
|
* @param ruleType
|
*/
|
public void checkRuleTime(XzxUserRedpaperRuleModel model,String ruleType){
|
if(model.getStatus().equals(Convert.toShort(1))) {
|
List<RedPaperRule> queryList = redPaperRuleService.queryRedpaperListStartAndEnd(model.getStartTime(), model.getEndTime(), model.getPartnerId(), model.getId(), ruleType);
|
if (queryList != null && queryList.size() > 0) {
|
throw new RestException("该时间段内已经存在当前规则");
|
}
|
}
|
}
|
|
|
/**
|
* 检查合伙人账户
|
* @param model
|
*/
|
public void checkPartnerAccountByRule(XzxUserRedpaperRuleModel model){
|
List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();
|
if (null != partnerIds && partnerIds.size() > 0) {
|
model.setPartnerId(partnerIds.get(0));
|
|
if(UserEnum.红包规则.getValue().equals(model.getRuleType())) {
|
//判断合伙人是否能建该红包
|
BigDecimal totalAmount = new BigDecimal(model.getAmount());
|
CityPartner partner = cityPartnerService.queryById(partnerIds.get(0));
|
PartnerAccountModel partnerAccountModel = cityPartnerService.queryAccountIdByUserId(partner.getUserId());
|
BigDecimal pHbb = new BigDecimal(partnerAccountModel.getHbb());
|
BigDecimal ff = pHbb.subtract(totalAmount);
|
if (ff.compareTo(BigDecimal.ZERO) == -1) {
|
throw new RestException("合伙人账户余额不足,当前余额为:" + DoubleUtil.roundTwo(pHbb.toString()));
|
}
|
}
|
}else {
|
if(!UserEnum.提佣规则.getValue().equals(model.getRuleType())) {
|
throw new RestException("非法操作");
|
}
|
}
|
}
|
|
/**
|
* 添加红包规则
|
* @param model
|
* @return
|
*/
|
public JsonResult addRedPaper(XzxUserRedpaperRuleModel model){
|
CoreUser user = sessionUtil.getCurrentUser();
|
model.setRuleType(UserEnum.红包规则.getValue());
|
checkPartnerAccountByRule(model);
|
List<RedPaper> infoList = new ArrayList<>();
|
|
checkRuleTime(model,UserEnum.红包规则.getValue());
|
|
//限制红包金额是否有符合正态分布
|
if (model.getIssuanceRules().equals("0")) {
|
String amount = model.getAmount();
|
String surplusNum = model.getRedEnvelopesNum();
|
BigDecimal avg = new BigDecimal(amount).divide(new BigDecimal(surplusNum), 2, RoundingMode.HALF_UP);
|
String minMoney = model.getMinMoney();
|
if (minMoney != null && !"".equals(minMoney)) {
|
if (new BigDecimal(minMoney).compareTo(avg) >= 0) {
|
return JsonResult.failMessage("平均金额必须大于最小金额!");
|
}
|
} else {
|
minMoney = model.getRandomAmountAverage().split(",")[0];
|
if (new BigDecimal(minMoney).compareTo(avg) >= 0) {
|
return JsonResult.failMessage("平均金额必须大于最小金额!");
|
}
|
}
|
}
|
|
//先保存规则
|
ObjectMapper objectMapper = new ObjectMapper();
|
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
RedPaperRule rule = objectMapper.convertValue(model, RedPaperRule.class);
|
rule.setCreateTime(cn.hutool.core.date.DateUtil.now());
|
rule.setDelFlag((short) 0);
|
rule.setRuleType("1");
|
|
redPaperRuleService.save(rule);
|
|
//通过规则关联红包
|
String amount = model.getAmount();
|
String redEnvelopesNum = model.getRedEnvelopesNum();
|
//金额随机或者金额固定
|
String issuanceRules = model.getIssuanceRules();
|
String randomAmountAverage = model.getRandomAmountAverage();
|
//合伙人设置红包,需要扣除合伙人的环保币余额
|
String result1 = subPartnerAccount(amount);
|
if (null != result1) {
|
return new JsonResult().failMessage(result1);
|
}
|
if (issuanceRules.equals("0")) {
|
//金额随机
|
String[] random = randomAmountAverage.split(",");
|
String minRadom = random[0];
|
String maxRadom = random[1];
|
long[] result = DoubleUtil.generate(amount, Integer.parseInt(redEnvelopesNum), maxRadom, minRadom);
|
double total = 0;
|
for (int i = 0; i < result.length; i++) {
|
double money = (double) result[i] / 100.00;
|
total += result[i];
|
if (rule.getId() != null) {
|
RedPaper info = saveRedPaperInfo(rule.getId(), amount, money);
|
info.setCreateUserId(user.getId() + "");
|
infoList.add(info);
|
}
|
}
|
batchInsertPaperInfo(infoList);
|
total = total / 100;
|
} else if (issuanceRules.equals("1")) {
|
int num = Integer.parseInt(redEnvelopesNum);
|
//金额固定
|
for (int i = 0; i < num; i++) {
|
RedPaper info = saveRedPaperInfo(rule.getId(), amount, Double.parseDouble(randomAmountAverage));
|
info.setCreateUserId(user.getId() + "");
|
infoList.add(info);
|
}
|
batchInsertPaperInfo(infoList);
|
}
|
return JsonResult.success(rule.getId());
|
}
|
|
|
/**
|
* 开启规则
|
* @param model
|
* @return
|
*/
|
public JsonResult<Object> openRule(XzxUserRedpaperRuleModel model){
|
RedPaperRule ru = redPaperRuleService.queryById(model.getId());
|
|
XzxUserRedpaperRuleModel xzxUserRedpaperRuleModel=new XzxUserRedpaperRuleModel();
|
xzxUserRedpaperRuleModel.setAmount(ru.getAmount());
|
xzxUserRedpaperRuleModel.setRuleType(ru.getRuleType());
|
checkPartnerAccountByRule(xzxUserRedpaperRuleModel);
|
|
ru.setPartnerId(xzxUserRedpaperRuleModel.getPartnerId());
|
|
|
ru.setStatus(model.getStatus());
|
|
|
XzxUserRedpaperRuleModel xzxUserRedpaperRuleModel1=new XzxUserRedpaperRuleModel();
|
BeanUtil.copyProperties(ru,xzxUserRedpaperRuleModel1);
|
checkRuleTime(xzxUserRedpaperRuleModel1,xzxUserRedpaperRuleModel1.getRuleType());
|
|
|
String compareType=null;
|
if(UserEnum.重量返利规则.getValue().equals(ru.getRuleType())){
|
compareType=UserEnum.阶梯返利规则.getValue();
|
}else if(UserEnum.阶梯返利规则.getValue().equals(ru.getRuleType())){
|
compareType=UserEnum.重量返利规则.getValue();
|
}
|
|
try {
|
xzxUserRedpaperRuleModel1.setId(null);
|
checkRuleTime(xzxUserRedpaperRuleModel1,compareType);
|
} catch (RestException e) {
|
return JsonResult.failMessage("阶梯返利规则和重量返利不能同时开启");
|
}
|
|
|
|
|
boolean success = redPaperRuleService.update(ru);
|
if (success) {
|
return new JsonResult().success();
|
} else {
|
return JsonResult.failMessage("修改失败");
|
}
|
|
}
|
|
private RedPaper saveRedPaperInfo(Integer ruleId, String total, double money) {
|
String code = FastDateFormat.getInstance("yyyyMMddHHmmssSSS").format(new Date());
|
RedPaper info = new RedPaper();
|
info.setCode(code);
|
info.setCreateTime(cn.hutool.core.date.DateUtil.now());
|
info.setMoney(new BigDecimal(String.valueOf(money)));
|
info.setTotalAmount(total);
|
info.setRuleId(ruleId);
|
info.setReceiveFlag((short) 1);
|
return info;
|
}
|
}
|