Commit 1d1c0d4c authored by shiyu's avatar shiyu

查询账单列表

parent 22b314aa
package com.wwdz.ch.admin.entity.vo;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.Date;
@Data
public class UserBillVo implements Entity {
private Integer id;
/**
* 账单id
*/
private String billId;
/**
* 账期
*/
private String accountPeriod;
/**
* 用户id
*/
private Long userId;
/**
* 用户名称
*/
private String userName;
/**
* 总入账金额
*/
private Long totalEntryAmount;
/**
* 总待入账金额
*/
private Long totalWaitEntryAmount;
/**
* 订单入账金额
*/
private Long orderEntryAmount;
/**
* 订单待入账金额
*/
private Long orderWaitEntryAmount;
/**
* 介绍佣金入账金额
*/
private Long introduceEntryAmount;
/**
* 介绍佣金待入账金额
*/
private Long introduceWaitEntryAmount;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 状态0未结款;1结款
*/
private Integer state;
/**
* 银行卡号
*/
private String bankCardId;
/**
* 银行卡号真实姓名
*/
private String realName;
/**
* 结款凭证
*/
private String voucher;
}
package com.wwdz.ch.admin.entity.vo;
import com.xxdxxs.entity.Entity;
import lombok.Data;
import java.util.Date;
import java.util.Map;
@Data
public class UserOrderBillVo implements Entity {
/**
* 分销订单号
*/
private String distributionOrderId;
/**
* 账期
*/
private String accountPeriod;
/**
* 用于列表展示的图片对象
*/
private Map<String, Object> homePageImage;
/**
* 商品名称
*/
private String itemName;
/**
* 卖方id
*/
private Long sellerId;
/**
* 卖家名称
*/
private String sellerName;
/**
* 订单金额,要除以100
*/
private String amount;
/**
* 平台实际到账金额
* 要减去微信手续费1%
*/
private String realAmount;
/**
* 订单创建时间
*/
private Date createTime;
/**
* 分销订单状态
*/
private Integer state;
/**
* 订单状态
*/
private String stateName;
/**
* 订单类型1一口价2竞拍
*/
private Integer orderType;
/**
* 订单类型1一口价2竞拍
*/
private String orderTypeName;
/**
* 收入类型
*/
private Integer type;
private String typeName;
/**
* 已入账金额
*/
private String enrtyAmount;
/**
* 待入账金额
*/
private String waitEnrtyAmount;
}
...@@ -2,23 +2,26 @@ package com.wwdz.ch.admin.impl; ...@@ -2,23 +2,26 @@ package com.wwdz.ch.admin.impl;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.wwdz.ch.admin.entity.vo.OrderBillVo; import com.wwdz.ch.admin.entity.vo.OrderBillVo;
import com.wwdz.ch.admin.entity.vo.UserBillVo;
import com.wwdz.ch.admin.entity.vo.UserOrderBillVo;
import com.wwdz.ch.admin.service.SysFinanceService; import com.wwdz.ch.admin.service.SysFinanceService;
import com.wwdz.ch.core.consts.BillEnum;
import com.wwdz.ch.core.consts.CommConsts; import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.consts.DistributionEnum; import com.wwdz.ch.core.consts.DistributionEnum;
import com.wwdz.ch.core.consts.LogisticsEnum; import com.wwdz.ch.core.consts.LogisticsEnum;
import com.wwdz.ch.core.type.PageSearchResult; import com.wwdz.ch.core.type.PageSearchResult;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.CacheUtil; import com.wwdz.ch.core.util.CacheUtil;
import com.wwdz.ch.core.util.DateTimeUtil;
import com.wwdz.ch.core.util.MediaUtil; import com.wwdz.ch.core.util.MediaUtil;
import com.wwdz.ch.core.util.PriceUtil; import com.wwdz.ch.core.util.PriceUtil;
import com.wwdz.ch.db.dao.distribution.*; import com.wwdz.ch.db.dao.distribution.*;
import com.wwdz.ch.db.domain.distribution.DistributionOrder; import com.wwdz.ch.db.domain.distribution.*;
import com.wwdz.ch.db.domain.distribution.DistributorProfit;
import com.wwdz.ch.db.domain.distribution.SupplierItem;
import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto; import com.wwdz.ch.db.dto.request.distribution.DistributionOrderRequestDto;
import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto; import com.wwdz.ch.db.dto.request.distribution.SupplierItemRequestDto;
import com.wwdz.ch.db.dto.request.distribution.UserAccountDetailRequestDto; import com.wwdz.ch.db.dto.request.distribution.UserAccountDetailRequestDto;
import com.wwdz.ch.db.dto.request.distribution.UserBillRequestDto; import com.wwdz.ch.db.dto.request.distribution.UserBillRequestDto;
import com.xxdxxs.utils.EntityMapper;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -29,6 +32,7 @@ import java.time.LocalDateTime; ...@@ -29,6 +32,7 @@ import java.time.LocalDateTime;
import java.time.YearMonth; import java.time.YearMonth;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
@Service @Service
...@@ -54,6 +58,12 @@ public class SysFinanceServiceImpl implements SysFinanceService { ...@@ -54,6 +58,12 @@ public class SysFinanceServiceImpl implements SysFinanceService {
@Autowired @Autowired
CacheUtil cacheUtil; CacheUtil cacheUtil;
@Autowired
UserBankCardDao userBankCardDao;
@Autowired
SettlementRecordDao settlementRecordDao;
@Override @Override
public Result findOrderBillDetail(DistributionOrderRequestDto dto) { public Result findOrderBillDetail(DistributionOrderRequestDto dto) {
try { try {
...@@ -107,8 +117,30 @@ public class SysFinanceServiceImpl implements SysFinanceService { ...@@ -107,8 +117,30 @@ public class SysFinanceServiceImpl implements SysFinanceService {
@Override @Override
public Result findUserBill(UserBillRequestDto dto) { public Result findUserBill(UserBillRequestDto dto) {
try { try {
List<UserBill> userBillList = userBillDao.findList(dto);
return Result.success(); PageInfo<UserBill> pageInfo = new PageInfo<>();
List<UserBillVo> userBillVoList = new ArrayList<>();
for (UserBill userBill : userBillList) {
UserBillVo userBillVo = new UserBillVo();
EntityMapper.copyAttribute(userBill, userBillVo);
userBillVo.setAccountPeriod(userBill.getAccountPeriod());
userBillVo.setUserName(cacheUtil.appletUserInfoCache.get(userBill.getUserId()).get().getNickname());
//查询银行卡信息
UserBankCard userBankCard = userBankCardDao.findById(userBill.getUserId());
if (userBankCard != null) {
userBillVo.setBankCardId(userBankCard.getCardId());
userBillVo.setRealName(userBillVo.getRealName());
}
if (userBill.getState() == BillEnum.BillStateEnum.PAID.getCode()) {
//查询结款凭证
SettlementRecord settlementRecord = settlementRecordDao.findByBillId(userBill.getBillId());
if (settlementRecord != null) {
userBillVo.setVoucher(settlementRecord.getVoucher());
}
}
userBillVoList.add(userBillVo);
}
return Result.success(PageSearchResult.of(pageInfo, userBillList));
} catch (Exception e) { } catch (Exception e) {
logger.error("查询用户账单error:{}", e); logger.error("查询用户账单error:{}", e);
} }
...@@ -118,7 +150,35 @@ public class SysFinanceServiceImpl implements SysFinanceService { ...@@ -118,7 +150,35 @@ public class SysFinanceServiceImpl implements SysFinanceService {
@Override @Override
public Result findUserBillDetail(UserAccountDetailRequestDto dto) { public Result findUserBillDetail(UserAccountDetailRequestDto dto) {
try { try {
if (dto.getStartCreateTime() == null || dto.getEndCreateTime() == null) {
Date[] dates = DateTimeUtil.getMonthDateTimeRange(dto.getAccountPeriod());
dto.setStartCreateTime(dates[0]);
dto.setEndCreateTime(dates[1]);
}
List<UserAccountDetail> userAccountDetailList = userAccountDetailDao.findList(dto);
PageInfo<UserAccountDetail> pageInfo = new PageInfo<>(userAccountDetailList);
List<UserOrderBillVo> userOrderBillVoList = new ArrayList<>();
for (UserAccountDetail userAccountDetail : userAccountDetailList) {
UserOrderBillVo userOrderBillVo = new UserOrderBillVo();
String distributionOrderId = userAccountDetail.getTransactionId();
DistributionOrder distributionOrder = distributionOrderDao.findById(distributionOrderId);
DistributorProfit distributorProfit = distributorProfitDao.findById(distributionOrderId);
SupplierItem supplierItem = supplierItemDao.findById(distributionOrder.getItemId());
userOrderBillVo.setDistributionOrderId(distributionOrderId);
userOrderBillVo.setItemName(supplierItem.getName());
userOrderBillVo.setHomePageImage(MediaUtil.getHomePageImage(supplierItem.getImages(), supplierItem.getVideos()));
userOrderBillVo.setSellerId(distributionOrder.getSellerId());
userOrderBillVo.setSellerName(cacheUtil.appletUserInfoCache.get(distributionOrder.getSellerId()).get().getNickname());
userOrderBillVo.setAmount(PriceUtil.convertPriceFenToYuan(distributionOrder.getAmount()));
userOrderBillVo.setRealAmount(PriceUtil.convertPriceFenToYuan(distributorProfit.getRealAmount()));
userOrderBillVo.setOrderType(distributionOrder.getType());
userOrderBillVo.setOrderTypeName( DistributionEnum.DistributionTypeEnum.getNameByCode(distributionOrder.getType()));
userOrderBillVo.setCreateTime(distributionOrder.getCreateTime());
userOrderBillVo.setState(distributionOrder.getState());
userOrderBillVo.setStateName(DistributionEnum.DistributionOrderStateEnum.getNameByCode(distributionOrder.getState()));
userOrderBillVo.setType(userAccountDetail.getType());
userOrderBillVo.setTypeName(BillEnum.AccountDetailTypeEnum.getNameByCode(userAccountDetail.getType()));
}
return Result.success(); return Result.success();
} catch (Exception e) { } catch (Exception e) {
logger.error("查询用户账单明细error:{}", e); logger.error("查询用户账单明细error:{}", e);
...@@ -126,6 +186,8 @@ public class SysFinanceServiceImpl implements SysFinanceService { ...@@ -126,6 +186,8 @@ public class SysFinanceServiceImpl implements SysFinanceService {
return Result.failed(); return Result.failed();
} }
@Override @Override
public Result findSystemBillDetail(UserAccountDetailRequestDto dto) { public Result findSystemBillDetail(UserAccountDetailRequestDto dto) {
try { try {
......
...@@ -73,6 +73,11 @@ public interface CommConsts { ...@@ -73,6 +73,11 @@ public interface CommConsts {
*/ */
public final static String IDENTIFY_ORDER_PREFIX = "IE"; public final static String IDENTIFY_ORDER_PREFIX = "IE";
/**
* 用户账单前缀
*/
public final static String USER_BILL_PREFIX = "BL";
/** /**
* 平台收货地址 * 平台收货地址
*/ */
......
...@@ -89,6 +89,8 @@ public class DateTimeUtil { ...@@ -89,6 +89,8 @@ public class DateTimeUtil {
} }
/** /**
* 判断是否是当前的日期 * 判断是否是当前的日期
* @param date * @param date
......
package com.wwdz.ch.db.dao.distribution; package com.wwdz.ch.db.dao.distribution;
import com.wwdz.ch.db.domain.distribution.SettlementRecord; import com.wwdz.ch.db.domain.distribution.SettlementRecord;
import com.wwdz.ch.db.domain.distribution.UserBill;
public interface SettlementRecordDao { public interface SettlementRecordDao {
boolean insert(SettlementRecord settlementRecord); boolean insert(SettlementRecord settlementRecord);
boolean update(SettlementRecord settlementRecord); boolean update(SettlementRecord settlementRecord);
SettlementRecord findByBillId(String billId);
} }
package com.wwdz.ch.db.dao.distribution; package com.wwdz.ch.db.dao.distribution;
import com.wwdz.ch.db.domain.distribution.UserBill; import com.wwdz.ch.db.domain.distribution.UserBill;
import com.wwdz.ch.db.dto.request.distribution.UserBillRequestDto;
import java.util.List;
public interface UserBillDao { public interface UserBillDao {
boolean insert(UserBill userBill); boolean insert(UserBill userBill);
boolean updateByPrimaryKey(UserBill userBill);
boolean update(UserBill userBill); boolean update(UserBill userBill);
boolean update(String billId, int state); boolean update(String billId, int state);
UserBill findOne(String accountPeriod, long userId, Integer state);
List<UserBill> findList(UserBillRequestDto dto);
} }
...@@ -16,6 +16,8 @@ public class UserAccountDetailRequestDto extends BaseRequestDto implements Entit ...@@ -16,6 +16,8 @@ public class UserAccountDetailRequestDto extends BaseRequestDto implements Entit
*/ */
private Long userId; private Long userId;
private String accountPeriod;
/** /**
* 交易id * 交易id
* 可以是订单号,也可以是转账记录id * 可以是订单号,也可以是转账记录id
...@@ -39,7 +41,9 @@ public class UserAccountDetailRequestDto extends BaseRequestDto implements Entit ...@@ -39,7 +41,9 @@ public class UserAccountDetailRequestDto extends BaseRequestDto implements Entit
/** /**
* 收入或支出的类型 * 收入或支出的类型
* 1收入; -1支出 * ORDER(1, "订单收入"),
* CHANNEL(2, "平台佣金"),
* INTRODUCE(3, "介绍佣金"),
*/ */
private Integer type; private Integer type;
...@@ -60,7 +64,7 @@ public class UserAccountDetailRequestDto extends BaseRequestDto implements Entit ...@@ -60,7 +64,7 @@ public class UserAccountDetailRequestDto extends BaseRequestDto implements Entit
private Date startCreateTime; private Date startCreateTime;
private Date startEndTime; private Date endCreateTime;
/** /**
* 更新时间 * 更新时间
......
...@@ -2,6 +2,7 @@ package com.wwdz.ch.db.impl.distribution; ...@@ -2,6 +2,7 @@ package com.wwdz.ch.db.impl.distribution;
import com.wwdz.ch.db.dao.distribution.SettlementRecordDao; import com.wwdz.ch.db.dao.distribution.SettlementRecordDao;
import com.wwdz.ch.db.domain.distribution.SettlementRecord; import com.wwdz.ch.db.domain.distribution.SettlementRecord;
import com.wwdz.ch.db.domain.distribution.SettlementRecordExample;
import com.wwdz.ch.db.mapper.distribution.SettlementRecordMapper; import com.wwdz.ch.db.mapper.distribution.SettlementRecordMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -21,4 +22,12 @@ public class SettlementRecordDaoImpl implements SettlementRecordDao { ...@@ -21,4 +22,12 @@ public class SettlementRecordDaoImpl implements SettlementRecordDao {
public boolean update(SettlementRecord settlementRecord) { public boolean update(SettlementRecord settlementRecord) {
return false; return false;
} }
@Override
public SettlementRecord findByBillId(String billId) {
SettlementRecordExample example = new SettlementRecordExample();
SettlementRecordExample.Criteria criteria = example.createCriteria();
criteria.andBillIdEqualTo(billId);
return settlementRecordMapper.selectOneByExampleWithBLOBs(example);
}
} }
...@@ -55,6 +55,8 @@ public class UserAccountDetailDaoImpl implements UserAccountDetailDao { ...@@ -55,6 +55,8 @@ public class UserAccountDetailDaoImpl implements UserAccountDetailDao {
JdbcHelper.ifPresent(dto.getTransactionId(), criteria::andTransactionIdEqualTo); JdbcHelper.ifPresent(dto.getTransactionId(), criteria::andTransactionIdEqualTo);
JdbcHelper.ifPresent(dto.getTransactionIdList(), criteria::andTransactionIdIn); JdbcHelper.ifPresent(dto.getTransactionIdList(), criteria::andTransactionIdIn);
JdbcHelper.ifPresent(dto.getFilterTransactionIdList(), criteria::andTransactionIdNotIn); JdbcHelper.ifPresent(dto.getFilterTransactionIdList(), criteria::andTransactionIdNotIn);
JdbcHelper.ifPresent(dto.getStartCreateTime(), criteria::andCreateTimeGreaterThanOrEqualTo);
JdbcHelper.ifPresent(dto.getEndCreateTime(), criteria::andCreateTimeLessThanOrEqualTo);
JdbcHelper.ifPresent(dto.getState(), criteria::andStateEqualTo); JdbcHelper.ifPresent(dto.getState(), criteria::andStateEqualTo);
JdbcHelper.ifPresent(dto.getType(), criteria::andTypeEqualTo); JdbcHelper.ifPresent(dto.getType(), criteria::andTypeEqualTo);
JdbcHelper.ifPresent(dto.getFundType(), criteria::andFundTypeEqualTo); JdbcHelper.ifPresent(dto.getFundType(), criteria::andFundTypeEqualTo);
......
package com.wwdz.ch.db.impl.distribution; package com.wwdz.ch.db.impl.distribution;
import com.github.pagehelper.PageHelper;
import com.wwdz.ch.db.dao.distribution.UserBillDao; import com.wwdz.ch.db.dao.distribution.UserBillDao;
import com.wwdz.ch.db.domain.distribution.UserBill; import com.wwdz.ch.db.domain.distribution.UserBill;
import com.wwdz.ch.db.domain.distribution.UserBillExample;
import com.wwdz.ch.db.dto.request.distribution.UserBillRequestDto;
import com.wwdz.ch.db.mapper.distribution.UserBillMapper; import com.wwdz.ch.db.mapper.distribution.UserBillMapper;
import com.xxdxxs.db.component.JdbcHelper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.Date;
import java.util.List;
@Repository @Repository
public class UserBillDaoImpl implements UserBillDao { public class UserBillDaoImpl implements UserBillDao {
@Autowired @Autowired
UserBillMapper userBillMapper; UserBillMapper userBillMapper;
@Override
public UserBill findOne(String accountPeriod, long userId, Integer state) {
UserBillExample example = new UserBillExample();
UserBillExample.Criteria criteria = example.createCriteria();
criteria.andAccountPeriodEqualTo(accountPeriod);
criteria.andUserIdEqualTo(userId);
JdbcHelper.ifPresent(state, criteria::andStateEqualTo);
return userBillMapper.selectOneByExample(example);
}
@Override
public List<UserBill> findList(UserBillRequestDto dto) {
UserBillExample example = new UserBillExample();
UserBillExample.Criteria criteria = example.createCriteria();
JdbcHelper.ifPresent(dto.getUserId(), criteria::andUserIdEqualTo);
JdbcHelper.ifPresent(dto.getAccountPeriod(), criteria::andAccountPeriodEqualTo);
JdbcHelper.ifPresent(dto.getState(), criteria::andStateEqualTo);
example.setOrderByClause(" update_time desc");
PageHelper.startPage(dto.getPage(), dto.getLimit());
return userBillMapper.selectByExample(example);
}
@Override
public boolean updateByPrimaryKey(UserBill userBill) {
userBill.setUpdateTime(new Date());
return userBillMapper.updateByPrimaryKeySelective(userBill) > 0;
}
@Override @Override
public boolean insert(UserBill userBill) { public boolean insert(UserBill userBill) {
return userBillMapper.insert(userBill) > 0; return userBillMapper.insert(userBill) > 0;
......
...@@ -3,12 +3,19 @@ package com.wwdz.ch.wx.impl.distribution; ...@@ -3,12 +3,19 @@ package com.wwdz.ch.wx.impl.distribution;
import com.wwdz.ch.core.consts.BillEnum; import com.wwdz.ch.core.consts.BillEnum;
import com.wwdz.ch.core.consts.CommConsts; import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.type.Result; import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.IdUtils;
import com.wwdz.ch.db.dao.distribution.UserAccountDetailDao; import com.wwdz.ch.db.dao.distribution.UserAccountDetailDao;
import com.wwdz.ch.db.dao.distribution.UserBillDao;
import com.wwdz.ch.db.domain.distribution.DistributionOrder; import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.domain.distribution.DistributorProfit; import com.wwdz.ch.db.domain.distribution.DistributorProfit;
import com.wwdz.ch.db.domain.distribution.UserAccountDetail; import com.wwdz.ch.db.domain.distribution.UserAccountDetail;
import com.wwdz.ch.db.domain.distribution.UserBill;
import com.wwdz.ch.wx.service.distribution.UserAccountDetailService; import com.wwdz.ch.wx.service.distribution.UserAccountDetailService;
import com.wwdz.ch.wx.service.distribution.UserBillService;
import com.wwdz.ch.wx.util.RedisUtil;
import com.xxdxxs.utils.StringUtils; import com.xxdxxs.utils.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -16,18 +23,32 @@ import org.springframework.stereotype.Service; ...@@ -16,18 +23,32 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.concurrent.TimeUnit;
@Service @Service
public class UserAccountDetailServiceImpl implements UserAccountDetailService { public class UserAccountDetailServiceImpl implements UserAccountDetailService {
private static final Logger logger = LoggerFactory.getLogger(SelfPageServiceImpl.class); private static final Logger logger = LoggerFactory.getLogger(SelfPageServiceImpl.class);
@Autowired @Autowired
UserAccountDetailDao userAccountDetailDao; UserAccountDetailDao userAccountDetailDao;
@Autowired
UserBillDao userBillDao;
@Autowired
UserBillService userBillService;
@Transactional(propagation=Propagation.REQUIRED) @Transactional(propagation=Propagation.REQUIRED)
@Override @Override
public Result create(DistributionOrder distributionOrder, DistributorProfit distributorProfit) throws Exception { public Result create(DistributionOrder distributionOrder, DistributorProfit distributorProfit) throws Exception {
try { try {
//订单金额 //订单金额
long orderAmount = distributionOrder.getAmount(); long orderAmount = distributionOrder.getAmount();
...@@ -78,6 +99,9 @@ public class UserAccountDetailServiceImpl implements UserAccountDetailService { ...@@ -78,6 +99,9 @@ public class UserAccountDetailServiceImpl implements UserAccountDetailService {
introduceAccountDetail.setState(BillEnum.AccountDetailStateEnum.INVALID.getCode()); introduceAccountDetail.setState(BillEnum.AccountDetailStateEnum.INVALID.getCode());
introduceAccountDetail.setCreateTime(distributionOrder.getCreateTime()); introduceAccountDetail.setCreateTime(distributionOrder.getCreateTime());
userAccountDetailDao.insert(introduceAccountDetail); userAccountDetailDao.insert(introduceAccountDetail);
//计算
userBillService.calculate(distributionOrder, distributorProfit);
return Result.success(); return Result.success();
} catch (Exception e) { } catch (Exception e) {
logger.error("新增用户账户明细error:{}", e); logger.error("新增用户账户明细error:{}", e);
......
package com.wwdz.ch.wx.impl.distribution;
import com.wwdz.ch.core.consts.BillEnum;
import com.wwdz.ch.core.consts.CommConsts;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.core.util.IdUtils;
import com.wwdz.ch.db.dao.distribution.UserBillDao;
import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.domain.distribution.DistributorProfit;
import com.wwdz.ch.db.domain.distribution.UserBill;
import com.wwdz.ch.wx.service.distribution.UserBillService;
import com.xxdxxs.utils.StringUtils;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;
@Service
public class UserBillServiceImpl implements UserBillService {
private static final Logger logger = LoggerFactory.getLogger(SelfPageServiceImpl.class);
private static final String COUNT_ORDER_PROFIT_KEY = "COUNT_ORDER_PROFIT_KEY:";
@Autowired
RedissonClient redissonClient;
@Autowired
UserBillDao userBillDao;
@Transactional
@Override
public Result calculate(DistributionOrder distributionOrder, DistributorProfit distributorProfit) throws Exception {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM");
//账期
String accountPeriod = formatter.format(distributionOrder.getCreateTime());
String key = COUNT_ORDER_PROFIT_KEY + accountPeriod + ":" + distributionOrder.getSellerId();
RLock lock = redissonClient.getLock(key);
try {
//计算卖家实时账单明细user_bill
if (!lock.tryLock(10, 10, TimeUnit.SECONDS)) {
logger.warn("订单号:{}, 账期为:{}, 用户id:{}, 计算订单账单获取锁失败 ERROR !!!!", distributionOrder.getDistributionOrderId(), accountPeriod, distributionOrder.getSellerId());
throw new Exception("计算订单账单获取锁失败");
}
//订单金额
long orderAmount = distributionOrder.getAmount();
//平台佣金
long channelCost = distributorProfit.getChannelCost();
//介绍佣金
long introduceCost = distributorProfit.getIntroduceCost();
//卖家实际收益
long sellerProfitAmount = distributorProfit.getProfit();
UserBill userBill = userBillDao.findOne(accountPeriod, distributionOrder.getSellerId(), BillEnum.BillStateEnum.NOT_PAID.getCode());
if (userBill == null) {
//保存新的账单
UserBill newBill = new UserBill();
String billId = IdUtils.getOrderNumber(CommConsts.USER_BILL_PREFIX);
newBill.setBillId(billId);
newBill.setAccountPeriod(accountPeriod);
newBill.setUserId(distributionOrder.getSellerId());
newBill.setTotalWaitEntryAmount(sellerProfitAmount);
newBill.setTotalEntryAmount(0L);
newBill.setOrderWaitEntryAmount(sellerProfitAmount);
newBill.setOrderEntryAmount(0L);
if (distributionOrder.getShareRecordId().equals(distributionOrder.getSellerId())) {
//表示介绍人是卖家自己
newBill.setIntroduceWaitEntryAmount(introduceCost);
} else {
newBill.setIntroduceWaitEntryAmount(0L);
}
newBill.setIntroduceEntryAmount(0L);
userBill.setCreateTime(new Date());
userBill.setUpdateTime(new Date());
userBill.setState(BillEnum.BillStateEnum.NOT_PAID.getCode());
userBillDao.insert(userBill);
} else {
UserBill updateBill = new UserBill();
long newTotalWaitEntryAmount = userBill.getTotalWaitEntryAmount() + sellerProfitAmount;
long newOrderWaitEntryAmount = userBill.getOrderWaitEntryAmount() + sellerProfitAmount;
updateBill.setId(userBill.getId());
updateBill.setTotalWaitEntryAmount(newTotalWaitEntryAmount);
updateBill.setOrderWaitEntryAmount(newOrderWaitEntryAmount);
if (distributionOrder.getShareRecordId().equals(distributionOrder.getSellerId())) {
//表示介绍人是卖家自己
long newIntroduceWaitEntryAmount = userBill.getIntroduceWaitEntryAmount() + introduceCost;
updateBill.setIntroduceWaitEntryAmount(newIntroduceWaitEntryAmount);
}
userBillDao.update(updateBill);
}
return Result.success();
} catch (Exception e) {
logger.error("************ 计算订单账单ERROR: {}", e);
throw new Exception("计算订单账单ERROR");
} finally {
if (lock != null && lock.isHeldByCurrentThread()) {
lock.unlock();
logger.info("======================== 订单号:{}, 计算订单账单释放锁成功 ========================", distributionOrder.getDistributionOrderId());
}
}
}
@Transactional
@Override
public Result calculateByOrderId(String distributionOrderId) {
return null;
}
}
package com.wwdz.ch.wx.service.distribution;
import com.wwdz.ch.core.type.Result;
import com.wwdz.ch.db.domain.distribution.DistributionOrder;
import com.wwdz.ch.db.domain.distribution.DistributorProfit;
public interface UserBillService {
/**
* 计算账单
* @param distributionOrder
* @param distributorProfit
* @return
*/
Result calculate(DistributionOrder distributionOrder, DistributorProfit distributorProfit) throws Exception;
Result calculateByOrderId(String distributionOrderId);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment