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 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 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 list = xzxUserShareInfoDao.queryOtherByPartnerId(null); for (String receiverId:list) { List 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 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())); } } } }