package com.ibeetl.admin.console.service;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.lang.Snowflake;
|
import cn.hutool.core.util.IdUtil;
|
import cn.hutool.json.JSON;
|
import cn.hutool.json.JSONUtil;
|
import com.ibeetl.admin.console.dao.*;
|
import com.ibeetl.admin.console.model.*;
|
import com.ibeetl.admin.console.util.DateUtil;
|
import com.ibeetl.admin.console.util.DoubleUtil;
|
import com.ibeetl.admin.core.entity.XzxCityPartner;
|
import com.ibeetl.admin.core.web.JsonResult;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
import org.springframework.scheduling.annotation.Scheduled;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.text.DecimalFormat;
|
import java.text.SimpleDateFormat;
|
import java.util.*;
|
|
/**
|
* 图表数据
|
*/
|
@Service
|
@Slf4j
|
@EnableScheduling
|
@Configuration
|
public class SettlementService {
|
static SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
static SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd");
|
|
@Autowired
|
private XzxUserShareInfoService service;
|
@Autowired private XzxCityPartnerDao xzxCityPartnerDao;
|
@Autowired
|
private XzxUserShareInfoDao xzxUserShareInfoDao;
|
@Autowired
|
PayConsoleDao payConsoleDao;
|
|
@Autowired
|
XzxCityPartnerService cpService;
|
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
@Autowired private FundManagementApiDao fundManagementApiDao;
|
@Scheduled(cron = "${ruleTime}")
|
public void index() throws Exception{
|
List<String> ruleList1 = xzxUserShareInfoDao.queryRuleOpen(null);
|
if(ruleList1.size()==0){
|
System.out.println("合伙人规则未启用==========");
|
return ;
|
}
|
|
//判断当前日期星期几
|
String time = sdf2.format(new Date());
|
String time1 = sdf1.format(new Date());
|
try {
|
String weekNum = DateUtil.dayForWeek(time);
|
int hour = DateUtil.getDayHour();
|
String timing = weekNum+","+hour;
|
List<XzxUserRedpaperRuleModel> ruleList = xzxUserShareInfoDao.queryRoyaltyByTimming(timing,time);
|
System.out.println("合伙人规则条数=========="+ruleList.size());
|
for (XzxUserRedpaperRuleModel rule:ruleList) {
|
boolean flag = false;
|
String productType = rule.getProductType();
|
//判断规则是否开启自动结算。
|
String[] typeList = productType.split(",");
|
for (String type:typeList) {
|
if(type.equals("4")){
|
flag = true;
|
}
|
}
|
if(flag){
|
updateRulePrice(rule);
|
}
|
}
|
} catch (Throwable throwable) {
|
throwable.printStackTrace();
|
}
|
}
|
|
private void updateRulePrice(XzxUserRedpaperRuleModel rule){
|
List<String> list = xzxUserShareInfoDao.queryOtherByPartnerId(null);
|
for (String receiverId:list) {
|
List<WeightItemPriceModel> royaltyList = xzxUserShareInfoDao.queryWeightItemByHsyList1(receiverId);
|
BigDecimal money = new BigDecimal("0");
|
int num =0;
|
if(royaltyList.size()>0){
|
for (WeightItemPriceModel itemModel:royaltyList) {
|
itemModel.setStatus("2");
|
num = xzxUserShareInfoDao.updateRoyaltyRule(itemModel);
|
List<WeightPriceModel> rulePrice = xzxUserShareInfoDao.queryRulePriceList(rule.getId()+"",null);
|
for (WeightPriceModel wp:rulePrice) {
|
if(itemModel.getProductType().equals(wp.getProductType())){
|
BigDecimal a = new BigDecimal(itemModel.getWeight());
|
BigDecimal rate = new BigDecimal(wp.getMoney());
|
String price = DoubleUtil.roundTwo(a.multiply(rate).toString());
|
money= money.add(new BigDecimal(price));
|
break;
|
}
|
}
|
WeightItemPriceLogModel logModel = new WeightItemPriceLogModel();
|
logModel.setItemId(itemModel.getId());
|
logModel.setSettlement("--");
|
logModel.setUnSettlement("--");
|
logModel.setReceiver(itemModel.getReceiver());
|
|
logModel.setCreateTime(sdf2.format(new Date()));
|
logModel.setTotalSettlement("--");
|
if(null!=itemModel.getPrice()&&!"".equals(itemModel.getPrice())){
|
money= money.add(new BigDecimal(itemModel.getPrice()));
|
|
}else{
|
money= money;
|
}
|
xzxUserShareInfoDao.insertRoyaltyLog(logModel);
|
}
|
|
UserAccountModel accountModel = fundManagementApiDao.getAccountByUserId(receiverId);
|
//accountModel.setMoney(DoubleUtil.add(accountModel.getMoney(),money.doubleValue()));
|
String oldAccountMoney = DoubleUtil.roundTwo(new BigDecimal(accountModel.getMoney()).toString());
|
|
XzxCityPartner partner = xzxCityPartnerDao.queryPartnerByOther(receiverId);
|
Snowflake snowflake = IdUtil.getSnowflake(0, 3);
|
String payOrderId = "ZF"+snowflake.nextIdStr();
|
|
int packageNum = service.addPartnerAccountLog(DoubleUtil.roundTwo(money.toString()),partner,payOrderId);
|
if(packageNum==0){
|
for (WeightItemPriceModel itemModel:royaltyList) {
|
if(itemModel.getStatus().equals("2")){
|
itemModel.setStatus("1");
|
//清除日志
|
xzxUserShareInfoDao.deleteBylogId(itemModel.getId());
|
}
|
xzxUserShareInfoDao.updateRoyaltyRule(itemModel);
|
}
|
continue;
|
}
|
|
BigDecimal overLimit = new BigDecimal(accountModel.getOverdraftLimit());
|
BigDecimal limit=new BigDecimal(accountModel.getFixedLimit());
|
BigDecimal ss = limit.subtract(overLimit);
|
BigDecimal flag1 = money.subtract(ss);
|
//判断额度是否可用
|
if(flag1.compareTo(BigDecimal.ZERO)==1){
|
accountModel.setMoney(flag1.doubleValue());
|
accountModel.setOverdraftLimit(DoubleUtil.roundTwo(limit.toString()));
|
}else if(flag1.compareTo(BigDecimal.ZERO)==0){
|
accountModel.setOverdraftLimit(DoubleUtil.roundTwo(limit.toString()));
|
}else{
|
accountModel.setOverdraftLimit(DoubleUtil.roundTwo(overLimit.add(money).toString()));
|
}
|
|
PayInfoModel model = new PayInfoModel();
|
model.setPayOrderId(payOrderId);
|
model.setMoney(DoubleUtil.roundTwo(money.toString()));
|
model.setCreateUserId(receiverId);
|
model.setCreateTime(sdf.format(new Date()));
|
model.setPayType("14");
|
model.setAccountId(accountModel.getAccountId());
|
model.setStatus("3");
|
model.setPayTime(sdf.format(new Date()));
|
cpService.addPayInfo1(model);
|
|
//回收员账户加钱
|
service.addOtherUserAccountLog(accountModel,money,payOrderId,oldAccountMoney);
|
String message = "您已经结算:+"+money+"元,提成单号:"+payOrderId+",请注意查收.";
|
payConsoleDao.insertMessage(message,receiverId,"","1","提成",sdf.format(new Date()));
|
//写入消息列表中
|
String message1 = "您已经结算:-"+money+"元,提成单号:"+payOrderId+",请注意检查.";
|
payConsoleDao.insertMessage(message1,partner.getUserId(),"","1","提成",sdf.format(new Date()));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|