package com.ibeetl.admin.console.service; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; import com.ibeetl.admin.console.dao.FundManagementApiDao; import com.ibeetl.admin.console.dao.XzxUserRedpaperInfoDao; import com.ibeetl.admin.console.model.PartnerAccountModel; import com.ibeetl.admin.console.model.PlatformAccountLogModel; import com.ibeetl.admin.console.model.UserAccountModel; import com.ibeetl.admin.console.model.XzxUserRedpaperInfoModel; import com.ibeetl.admin.console.util.DoubleUtil; import com.ibeetl.admin.core.entity.CoreUser; import com.ibeetl.admin.core.entity.XzxCityPartner; import com.ibeetl.admin.core.entity.XzxUserRedpaperInfo; import com.ibeetl.admin.core.entity.XzxUserRedpaperRule; import com.ibeetl.admin.core.service.CoreBaseService; import com.ibeetl.admin.core.service.CorePlatformService; import com.ibeetl.admin.core.util.PlatformException; import org.apache.commons.codec.binary.Base64; import org.beetl.sql.core.engine.PageQuery; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * XzxUserRedpaperInfo Service */ @Service @Transactional public class XzxUserRedpaperInfoService extends CoreBaseService{ @Autowired private XzxUserRedpaperInfoDao xzxUserRedpaperInfoDao; @Autowired XzxCityPartnerService service; SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); @Autowired XzxCityPartnerService cityPartnerService; @Autowired CorePlatformService platformService; @Autowired private FundManagementApiDao fundManagementApiDao; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); final Base64 base64 = new Base64(); public PageQueryqueryByCondition(PageQuery query){ PageQuery ret = xzxUserRedpaperInfoDao.queryByCondition(query); queryListAfter(ret.getList()); return ret; } public void batchDelXzxUserRedpaperInfo(List ids){ try { xzxUserRedpaperInfoDao.batchDelXzxUserRedpaperInfoByIds(ids); } catch (Exception e) { throw new PlatformException("批量删除XzxUserRedpaperInfo失败", e); } } public String cancelRedPaper(XzxCityPartner partner){ String day = sdf.format(new Date()); Snowflake snowflake = IdUtil.getSnowflake(0, 3); String payOrderId = "ZF"+snowflake.nextIdStr(); if(null!=partner){ //合伙人退还红包 //判断红包有效时间是否已经截止 XzxUserRedpaperRule rule = xzxUserRedpaperInfoDao.queryRuleByDay(partner.getId(),day); 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); } }else{ rule = xzxUserRedpaperInfoDao.queryRuleByDay(partner.getId(),null); String endTime =rule.getEndTime(); if(null!=endTime&&!"".equals(endTime)){ String[] times = endTime.split("-"); return "请在红包结束时间"+times[0]+"年"+times[1]+"月"+times[2]+"日之后进行操作"; }else{ return "没有规则,无法退红包!"; } } }else{ //平台管理员退还红包 XzxUserRedpaperRule rule = xzxUserRedpaperInfoDao.queryRuleByDay(null,day); 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())); } }else{ rule = xzxUserRedpaperInfoDao.queryRuleByDay(null,null); 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 xzxUserRedpaperInfoDao.queryMoneyByRuleId(ruleId); } private void updateAdminAccount(String money,String hbb,String oldHbb,String oldMoney,String newHbb,String newMoney,XzxCityPartner partner,String payOrderId){ CoreUser user = platformService.getCurrentUser(); PlatformAccountLogModel platformAccountLogModel = new PlatformAccountLogModel(); platformAccountLogModel.setCreateTime(sdf.format(new Date())); 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); fundManagementApiDao.insertPlatFormLog(platformAccountLogModel); } public Map redPaperList(XzxUserRedpaperInfoModel model){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); model.setPartnerIds(partnerIds); Map map = new HashMap<>(); int p = model.getPage(); p = (p - 1) * model.getLimit(); model.setPage(p); List list = xzxUserRedpaperInfoDao.redPaperList(model); for (XzxUserRedpaperInfoModel resultModel:list) { String name = resultModel.getName(); if(name!=null&&!"".equals(name)){ try { name =new String(base64.decode(name), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } resultModel.setName(name); } Map totalmap = xzxUserRedpaperInfoDao.redPaperTotal(model); map.put("data",list); map.put("count",xzxUserRedpaperInfoDao.redPaperCount(model)); 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 list){ xzxUserRedpaperInfoDao.batchInsertPaperInfo(list); } public String subPartnerAccount(String amount){ List partnerIds = service.queryPartnerByCurrent(); Snowflake snowflake = IdUtil.getSnowflake(0, 3); String payOrderId = "ZF"+snowflake.nextIdStr(); if(null!=partnerIds&&partnerIds.size()>0){ PartnerAccountModel partnerAccount = new PartnerAccountModel(); XzxCityPartner partner = service.queryById(partnerIds.get(0)); partnerAccount = service.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 = service.queryPartnerAccountByUserId(partner.getUserId()); cityPartnerService.insertPartnerAccountLog(userAccount,"5",new BigDecimal(amount),payOrderId,"8"); userAccount.setMoney(Double.valueOf(DoubleUtil.roundTwo(subHbb.toString()))); cityPartnerService.updateAccountPartner(userAccount); partnerAccount.setHbb(DoubleUtil.roundTwo(subHbb.toString())); cityPartnerService.updatePartnerAccount(partnerAccount); }else{ String acc = service.queryAccountByAdminId(); String[] accArr = acc.split(","); String adminMoney = accArr[1]; String adminhbb = accArr[2]; //平台 BigDecimal oldAdminMoney = new BigDecimal(adminMoney); BigDecimal oldAdminhbb = new BigDecimal(adminhbb); //平台账户处理红包 BigDecimal newAdminhbb = oldAdminhbb.subtract(new BigDecimal(amount)); service.updatePlatformHbb(DoubleUtil.roundTwo(newAdminhbb.toString())); PlatformAccountLogModel platformAccountLogModel = new PlatformAccountLogModel(); platformAccountLogModel.setCreateTime(sdf.format(new Date())); 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); service.insertPlatFormLog(platformAccountLogModel); } return null; } }