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<XzxUserShareInfo>{
|
|
@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 PageQuery<XzxUserShareInfo>queryByCondition(PageQuery query){
|
PageQuery ret = xzxUserShareInfoDao.queryByCondition(query);
|
queryListAfter(ret.getList());
|
return ret;
|
}
|
|
public void batchDelXzxUserShareInfo(List<Long> ids){
|
try {
|
xzxUserShareInfoDao.batchDelXzxUserShareInfoByIds(ids);
|
} catch (Exception e) {
|
throw new PlatformException("批量删除XzxUserShareInfo失败", e);
|
}
|
}
|
|
public Map<String,Object> queryShareInfoList(XzxUserShareInfoModel model){
|
List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();
|
model.setPartnerIds(partnerIds);
|
Map<String,Object> 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<XzxUserShareInfoModel> 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<String> 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<RebateWeightPriceModel> list){
|
xzxUserShareInfoDao.insertPriceHistory(list);
|
}
|
public List<RebateWeightPriceModel> queryOldItemList(String ruleId){
|
return xzxUserShareInfoDao.queryOldItemList(ruleId);
|
}
|
public Map<String,Object> queryWeightOrderList(WeightOrderModel model) {
|
List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();
|
List<String> 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<String,Object> map = new HashMap<>();
|
map.put("code",0);
|
List<WeightOrderModel> 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<String,Object> queryShareOrderList(XzxPlatformCapitalInfoModel model) {
|
Map<String, Object> map = new HashMap<>();
|
int p = model.getPage();
|
p = (p - 1) * model.getLimit();
|
model.setPage(p);
|
List<XzxPlatformCapitalInfoModel> 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<String> queryRuleOpen(){
|
CoreUser user = platformService.getCurrentUser();
|
XzxCityPartner partner = cityPartnerService.queryById(user.getId());
|
List<String> 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<WeightItemPriceModel> 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<String,Object> queryPackageType(){
|
List<Map<String,Object>> list = xzxUserShareInfoDao.queryPackageGoods();
|
for (Map<String,Object> map1 :list) {
|
map1.put("configTypeName",map1.get("title"));
|
map1.put("configTypeCode",map1.get("itemtype"));
|
}
|
Map<String,Object> map = new HashMap<>();
|
map.put("data",list);
|
map.put("code",0);
|
return map;
|
}
|
public Map<String,Object> queryRoyaltyManage(SettlementModel model){
|
int p = (model.getPage() - 1) * model.getLimit();
|
model.setPage(p);
|
Map<String,Object> map = new HashMap<>();
|
List<String> partnerIds = cityPartnerService.queryPartnerByCurrent();
|
model.setPartnerIds(partnerIds);
|
List<SettlementModel> list = xzxUserShareInfoDao.queryRoyaltyManage(model);
|
List<XzxUserRedpaperRuleModel> 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<WeightItemPriceModel> 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<WeightPriceModel> 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;
|
}
|
|
|
|
}
|