package com.ibeetl.admin.console.service; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.IdUtil; 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.*; 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.apache.commons.lang3.StringUtils; 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.*; /** * XzxUserShareInfo Service */ @Service @Transactional public class XzxUserShareInfoService extends CoreBaseService{ @Autowired private XzxUserShareInfoDao xzxUserShareInfoDao; @Autowired private XzxUserRedpaperRuleDao xzxUserRedpaperRuleDao; @Autowired private FundManagementApiDao fundManagementApiDao; @Autowired private XzxCityPartnerDao xzxCityPartnerDao; @Autowired CorePlatformService platformService; @Autowired PayConsoleDao payConsoleDao; @Autowired PayConsoleService payLogService; @Autowired XzxCityPartnerService cityPartnerService; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); final Base64 base64 = new Base64(); public PageQueryqueryByCondition(PageQuery query){ PageQuery ret = xzxUserShareInfoDao.queryByCondition(query); queryListAfter(ret.getList()); return ret; } public void batchDelXzxUserShareInfo(List ids){ try { xzxUserShareInfoDao.batchDelXzxUserShareInfoByIds(ids); } catch (Exception e) { throw new PlatformException("批量删除XzxUserShareInfo失败", e); } } public Map queryShareInfoList(XzxUserShareInfoModel model){ List partnerIds = cityPartnerService.queryPartnerByCurrent(); model.setPartnerIds(partnerIds); Map map = new HashMap<>(); int p = model.getPage(); p = (p - 1) * model.getLimit(); model.setPage(p); if(!StringUtils.isEmpty(model.getName())){ model.setName(new String(Base64.encodeBase64(model.getName().getBytes()))); } if(!StringUtils.isEmpty(model.getRegisterName())){ model.setRegisterName(new String(Base64.encodeBase64(model.getRegisterName().getBytes()))); } List list = xzxUserShareInfoDao.queryShareInfoList(model); for (XzxUserShareInfoModel info:list) { //转昵称 String name = info.getName(); String registName = info.getRegisterName(); if(name!=null&&!"".equals(name)){ try { name =new String(base64.decode(name), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } if(registName!=null&&!"".equals(registName)){ try { registName =new String(base64.decode(registName), "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } info.setName(name); info.setRegisterName(registName); //查询用户此单之前的累计重量 String totalMoney = "0" ; String userId = info.getUserId(); String invitedUserId = info.getInvitedUserId(); String completeTime = null; List orderIds = new ArrayList<>(); if(invitedUserId!=null&&!"".equals(invitedUserId)){ orderIds = xzxUserRedpaperRuleDao.queryUserOrderIds(completeTime,invitedUserId); } if(orderIds!=null&&orderIds.size()>0){ totalMoney = xzxUserRedpaperRuleDao.queryTotalOrderMoney(orderIds); info.setStatus("0"); }else{ info.setStatus("1"); } info.setTotalMoney(DoubleUtil.roundTwo(totalMoney)); } String totalAmount =xzxUserShareInfoDao.totalAmount(model); int num = xzxUserShareInfoDao.queryShareInfoCount(model); map.put("totalAmount",DoubleUtil.roundTwo(totalAmount)); map.put("data",list); map.put("count",num); map.put("personNum",num); return map; } public int addRoyaltyRule(RebateWeightPriceModel model) { int num = xzxUserShareInfoDao.addRoyaltyRule(model); return num; } public void deleteByRuleId(String ruleId){ int num = xzxUserShareInfoDao.deleteByRuleId(ruleId); } public void insertPriceHistory(List list){ xzxUserShareInfoDao.insertPriceHistory(list); } public List queryOldItemList(String ruleId){ return xzxUserShareInfoDao.queryOldItemList(ruleId); } public Map queryWeightOrderList(WeightOrderModel model) { List partnerIds = cityPartnerService.queryPartnerByCurrent(); List fenceIds = xzxUserShareInfoDao.queryFenceByPartnerIds(partnerIds); model.setFenceIds(fenceIds); int p = (model.getPage() - 1) * model.getLimit(); model.setPage(p); if(null!=model.getStartTime()&&!"".equals(model.getStartTime())){ model.setStartTime(model.getStartTime()+" 00:00:00"); } if(null!=model.getEndTime()&&!"".equals(model.getEndTime())){ model.setEndTime(model.getEndTime()+" 23:59:59"); } if(null!=model.getNickName()&&!"".equals(model.getNickName())){ model.setMobilePhone(model.getNickName()); model.setNickName(new String(Base64.encodeBase64(model.getNickName().getBytes()))); } if(null!=model.getMobilePhone()&&!"".equals(model.getMobilePhone())){ model.setNickName(new String(Base64.encodeBase64(model.getMobilePhone().getBytes()))); } Map map = new HashMap<>(); map.put("code",0); List list = xzxUserShareInfoDao.queryWeightOrderList(model); String totalMoney = xzxUserShareInfoDao.queryTotalRoyaltyMoney(fenceIds); for (WeightOrderModel model1:list) { String royaltMoney = DoubleUtil.roundTwo(model1.getRoyaltyMoney()); String partnerMoney = DoubleUtil.roundTwo(model1.getPartnerMoney()); BigDecimal t = new BigDecimal(royaltMoney); BigDecimal pa = new BigDecimal(partnerMoney); model1.setHsyMoney(DoubleUtil.roundTwo(t.subtract(pa).toString())); model1.setRoyaltyMoney(royaltMoney); model1.setPartnerMoney(partnerMoney); model1.setDesignatedWeight(DoubleUtil.roundThree(model1.getDesignatedWeight())); model1.setOrderMoney(DoubleUtil.roundTwo(model1.getOrderMoney())); if(DateUtil.isBase64(model1.getNickName())){ try { model1.setNickName(new String(base64.decode(model1.getNickName()), "UTF-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } map.put("data",list); int num = xzxUserShareInfoDao.queryWeightOrderCount(model); map.put("count",num); map.put("flNum",num); if(null!=totalMoney&&!"".equals(totalMoney)){ map.put("totalMoney",DoubleUtil.roundTwo(totalMoney)); }else{ map.put("totalMoney","0"); } return map; } public Map queryShareOrderList(XzxPlatformCapitalInfoModel model) { Map map = new HashMap<>(); int p = model.getPage(); p = (p - 1) * model.getLimit(); model.setPage(p); List list = xzxUserShareInfoDao.queryShareOrderList(model.getShareId(),model.getPage(),model.getLimit()); map.put("data",list); map.put("count",xzxUserShareInfoDao.queryShareOrderCount(model.getShareId())); map.put("code",0); return map; } public List queryRuleOpen(){ CoreUser user = platformService.getCurrentUser(); XzxCityPartner partner = cityPartnerService.queryById(user.getId()); List list = new ArrayList<>(); if(null!=partner){ list = xzxUserShareInfoDao.queryRuleOpen(partner.getId()+""); }else{ list = xzxUserShareInfoDao.queryRuleOpen(null); } return list; } public int updateRoyaltyRule(SettlementModel model){ int num = 0 ; if(model.isFlag()){ List weightList = model.getRoyaltyList(); BigDecimal settlementMoney = new BigDecimal(model.getSettlementMoney()); BigDecimal royaltyMoney = new BigDecimal(model.getRoyaltyMoney()); BigDecimal money = new BigDecimal("0"); for (WeightItemPriceModel itemModel:weightList) { if(itemModel.getStatus().equals("2")){ WeightItemPriceLogModel logModel = new WeightItemPriceLogModel(); logModel.setItemId(itemModel.getId()); logModel.setSettlement(settlementMoney.toString()); logModel.setUnSettlement(royaltyMoney.toString()); logModel.setReceiver(model.getReceiver()); logModel.setCreateTime(sdf.format(new Date())); settlementMoney =settlementMoney.add(new BigDecimal(itemModel.getPrice())); royaltyMoney = royaltyMoney.subtract(new BigDecimal(itemModel.getPrice())); money= money.add(new BigDecimal(itemModel.getPrice())); logModel.setTotalSettlement(DoubleUtil.roundTwo(settlementMoney.toString())); xzxUserShareInfoDao.insertRoyaltyLog(logModel); } num = xzxUserShareInfoDao.updateRoyaltyRule(itemModel); } UserAccountModel accountModel = fundManagementApiDao.getAccountByUserId(model.getReceiver()); //accountModel.setMoney(DoubleUtil.add(accountModel.getMoney(),money.doubleValue())); String ssAccountMoney = new BigDecimal(accountModel.getMoney()).toString(); XzxCityPartner partner = xzxCityPartnerDao.queryPartnerByOther(model.getReceiver()); Snowflake snowflake = IdUtil.getSnowflake(0, 3); String payOrderId = "ZF"+snowflake.nextIdStr(); //扣合伙人环保币 更新账号余额 写日志 int packageNum = addPartnerAccountLog(DoubleUtil.roundTwo(money.toString()),partner,payOrderId); //是否扣款成功 if(packageNum==0){ for (WeightItemPriceModel itemModel:weightList) { if(itemModel.getStatus().equals("2")){ itemModel.setStatus("1"); //清除日志 xzxUserShareInfoDao.deleteBylogId(itemModel.getId()); } xzxUserShareInfoDao.updateRoyaltyRule(itemModel); } return -1; } 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())); } //回收员账户加钱 addOtherUserAccountLog(accountModel,money,payOrderId,ssAccountMoney); PayInfoModel model1 = new PayInfoModel(); model1.setPayOrderId(payOrderId); model1.setMoney(DoubleUtil.roundTwo(money.toString())); model1.setCreateUserId(model.getReceiver()); model1.setCreateTime(sdf.format(new Date())); model1.setPayType("14"); model1.setAccountId(accountModel.getAccountId()); model1.setStatus("3"); model1.setPayTime(sdf.format(new Date())); cityPartnerService.addPayInfo1(model1); //写入消息列表中 String message = "您已经结算:+"+money+"元,提成单号:"+payOrderId+",请注意查收."; payConsoleDao.insertMessage(message,model.getReceiver(),"","1","提成",sdf.format(new Date())); //写入消息列表中 String message1 = "您已经结算:-"+money+"元,提成单号:"+payOrderId+",请注意检查."; payConsoleDao.insertMessage(message1,partner.getUserId(),"","1","提成",sdf.format(new Date())); } return num; } public void addOtherUserAccountLog1(UserAccountModel accountModel,String type,BigDecimal money,String payOrderId){ BigDecimal newMon = new BigDecimal(accountModel.getMoney()).add(money); xzxUserShareInfoDao.updateUserAccount(accountModel.getAccountId(),DoubleUtil.roundTwo(accountModel.getMoney()+""),accountModel.getOverdraftLimit()); //写入日志 AccountLogModel log = new AccountLogModel(); log.setAccountId(accountModel.getAccountId()); log.setChannelType(type); log.setCreateTime(sdf.format(new Date())); log.setCreateUserId(accountModel.getUserId()); BigDecimal oldFixedLimit = new BigDecimal(String.valueOf(accountModel.getFixedLimit())); BigDecimal oldLimit = new BigDecimal(String.valueOf(accountModel.getOverdraftLimit())); BigDecimal oldMoney = new BigDecimal(accountModel.getMoney()); log.setNewFixedLimit(accountModel.getFixedLimit()); log.setNewLimit(accountModel.getLimit()+""); log.setNewMoney(DoubleUtil.roundTwo(newMon.toString())); log.setOldFixedLimit(accountModel.getFixedLimit()); log.setOldLimit(accountModel.getLimit()+""); log.setOldMoney(DoubleUtil.roundTwo(accountModel.getMoney()+"")); log.setOrderId(payOrderId); //model.setOrderId(payOrderId); payLogService.insertAccountLog(log); } public void addOtherUserAccountLog(UserAccountModel accountModel,BigDecimal money,String payOrderId,String accountMoney){ BigDecimal oldMon = new BigDecimal(accountModel.getMoney()).subtract(money); //accountModel.setMoney(DoubleUtil.add(accountModel.getMoney(),money.doubleValue())); BigDecimal newAccountMoney= new BigDecimal(accountMoney).add(new BigDecimal(accountModel.getMoney())); System.out.println("修改后账户的金额===="+accountModel.getMoney()+"======增加的钱====="+money); xzxUserShareInfoDao.updateUserAccount(accountModel.getAccountId(),DoubleUtil.roundTwo(newAccountMoney.toString()),accountModel.getOverdraftLimit()); //写入日志 AccountLogModel log = new AccountLogModel(); log.setAccountId(accountModel.getAccountId()); log.setChannelType("12"); log.setCreateTime(sdf.format(new Date())); log.setCreateUserId(accountModel.getUserId()); BigDecimal oldFixedLimit = new BigDecimal(String.valueOf(accountModel.getFixedLimit())); BigDecimal oldLimit = new BigDecimal(String.valueOf(accountModel.getOverdraftLimit())); BigDecimal oldMoney = new BigDecimal(accountMoney); log.setNewFixedLimit(accountModel.getFixedLimit()); log.setNewLimit(accountModel.getLimit()+""); log.setNewMoney(DoubleUtil.roundTwo(newAccountMoney.toString())); log.setOldFixedLimit(accountModel.getFixedLimit()); log.setOldLimit(accountModel.getLimit()+""); log.setOldMoney(DoubleUtil.roundTwo(oldMoney.toString())); log.setOrderId(payOrderId); //model.setOrderId(payOrderId); payLogService.insertAccountLog(log); } public int addPartnerAccountLog(String money,XzxCityPartner partner,String payOrderId){ String accountInfoMoney = xzxCityPartnerDao.queryAccountByPartnerId(partner.getUserId()); BigDecimal newMoney = new BigDecimal(accountInfoMoney).subtract(new BigDecimal(money)); PartnerAccountModel partnerAccountModel = fundManagementApiDao.getPartnerAccountByUserId(partner.getUserId()); BigDecimal hbb = new BigDecimal(partnerAccountModel.getHbb()); hbb = hbb.subtract(new BigDecimal(money)); if(hbb.compareTo(BigDecimal.ZERO)==-1){ return 0; } fundManagementApiDao.updateParterAccount(DoubleUtil.roundTwo(hbb.toString()),partnerAccountModel.getAccount()); //写入日志 AccountLogModel log1 = new AccountLogModel(); log1.setAccountId(partner.getAccountNo()); log1.setChannelType("12"); log1.setCreateTime(sdf.format(new Date())); log1.setCreateUserId(partner.getUserId()); log1.setOldMoney(accountInfoMoney); log1.setOrderId(payOrderId); log1.setNewMoney(newMoney.toString()); payLogService.insertAccountLog(log1); PayLog newPl = new PayLog(); newPl.setAccountId(partner.getAccountNo()); newPl.setMoney(newMoney.doubleValue()); payConsoleDao.updateAccountMoneyDouble(newPl); /* PartnerAccountModel partnerAccountModel = fundManagementApiDao.getPartnerAccountByUserId(partner.getUserId()); BigDecimal hbb = new BigDecimal(partnerAccountModel.getHbb()); hbb = hbb.subtract(new BigDecimal(money)); fundManagementApiDao.updateParterAccount(DoubleUtil.roundTwo(hbb.toString()),partnerAccountModel.getAccount()); */ PartnerAccountLogModel log = new PartnerAccountLogModel(); log.setFlowNo(payOrderId); log.setCreateTime(sdf.format(new Date())); log.setApproverStatus("1"); log.setMoney(money); log.setHbb(money); log.setDelFlag(0); log.setAccountId(partner.getAccountNo()); log.setUserName(partner.getPartnerName()); log.setType("1"); log.setUserPhone(partner.getMobilePhone()); log.setRoleName("城市合伙人"); xzxCityPartnerDao.addPartnerAccountLog(log); return 1; } public Map queryPackageType(){ List> list = xzxUserShareInfoDao.queryPackageGoods(); for (Map map1 :list) { map1.put("configTypeName",map1.get("title")); map1.put("configTypeCode",map1.get("itemtype")); } Map map = new HashMap<>(); map.put("data",list); map.put("code",0); return map; } public Map queryRoyaltyManage(SettlementModel model){ int p = (model.getPage() - 1) * model.getLimit(); model.setPage(p); Map map = new HashMap<>(); List partnerIds = cityPartnerService.queryPartnerByCurrent(); model.setPartnerIds(partnerIds); List list = xzxUserShareInfoDao.queryRoyaltyManage(model); List ruleList = xzxUserShareInfoDao.queryRoyalty(partnerIds); boolean flag = false; int count=0; if(null!=ruleList&&ruleList.size()>0){ XzxUserRedpaperRuleModel rule = ruleList.get(0); String productType = rule.getProductType(); String[] typeList = productType.split(","); for (String type:typeList) { if(type.equals("3")){ flag = true; } } for (SettlementModel seModel:list) { List royaltyList = xzxUserShareInfoDao.queryWeightItemList(seModel.getReceiver()); BigDecimal royaltyMoney= new BigDecimal("0"); BigDecimal settlementMoney = new BigDecimal("0"); for (WeightItemPriceModel pModel:royaltyList) { String time = pModel.getCreateTime(); /* if(pModel.getProductType().equals("1")){ }*/ String title = xzxUserShareInfoDao.queryGoodsById(pModel.getProductType()); pModel.setProductName(title); if(null!=rule){ List rulePrice = xzxUserShareInfoDao.queryRulePriceList(rule.getId()+"",time); if(rulePrice.size()>0){ }else{ rulePrice = xzxUserShareInfoDao.queryRoyaltyHistory(rule.getId()+"",time); } if(pModel.getStatus().equals("1")){ for (WeightPriceModel rp:rulePrice) { BigDecimal a = new BigDecimal(pModel.getWeight()); BigDecimal rate = new BigDecimal(rp.getMoney()); if(rp.getProductType().equals(pModel.getProductType())){ pModel.setPrice(DoubleUtil.roundTwo(a.multiply(rate).toString())); royaltyMoney= royaltyMoney.add(new BigDecimal(pModel.getPrice())); break; } } }else if(pModel.getStatus().equals("2")){ for (WeightPriceModel rp:rulePrice) { BigDecimal a = new BigDecimal(pModel.getWeight()); BigDecimal rate = new BigDecimal(rp.getMoney()); if(rp.getProductType().equals(pModel.getProductType())){ pModel.setPrice(DoubleUtil.roundTwo(a.multiply(rate).toString())); settlementMoney = settlementMoney.add(new BigDecimal(pModel.getPrice())); break; } } } }else{ return null; } } seModel.setRoyaltyMoney(DoubleUtil.roundTwo(royaltyMoney.toString())); seModel.setSettlementMoney(DoubleUtil.roundTwo(settlementMoney.toString())); seModel.setRoyaltyList(royaltyList); seModel.setFlag(flag); } } String num =xzxUserShareInfoDao.queryRoyaltyManageCount(model); if(null!=num&&!"".equals(num)){ count = Integer.parseInt(num); } map.put("flag",flag); map.put("data",list); map.put("count",count); map.put("code",0); return map; } }