package com.yeshi.fanli.util.factory; import java.math.BigDecimal; import java.util.Calendar; import java.util.Date; import com.yeshi.fanli.entity.bus.user.AccountDetails; import com.yeshi.fanli.entity.bus.user.AlipayAccountValidNormalHistory; import com.yeshi.fanli.entity.bus.user.Extract; import com.yeshi.fanli.entity.bus.user.HongBao; import com.yeshi.fanli.entity.bus.user.UserInfo; import com.yeshi.fanli.entity.money.UserMoneyDetail; import com.yeshi.fanli.entity.money.UserMoneyDetail.UserMoneyDetailTypeEnum; import com.yeshi.fanli.entity.taobao.TaoBaoWeiQuanDrawBack; import com.yeshi.fanli.exception.money.UserMoneyDetailException; import com.yeshi.fanli.util.StringUtil; import com.yeshi.fanli.util.TimeUtil; public class UserMoneyDetailFactory { /** * 返利资金记录 * * @param hongBaoList * @return */ public static UserMoneyDetail createFanLi(Long uid, String orderId, int orderType,Long hbId, BigDecimal money) throws UserMoneyDetailException { if (StringUtil.isNullOrEmpty(orderId)) throw new UserMoneyDetailException(1, "订单号为空"); if (money == null) throw new UserMoneyDetailException(1, "返利金额为空"); if (uid == null) throw new UserMoneyDetailException(1, "UID为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode( StringUtil.Md5(UserMoneyDetailTypeEnum.fanli.name() + "-" + uid + "-" + orderType + "-" + orderId+"-"+hbId)); detail.setMoney(money); detail.setTitle(UserMoneyDetailTypeEnum.fanli.getDesc()); detail.setType(UserMoneyDetailTypeEnum.fanli); detail.setDescInfo("订单号:" + orderId); detail.setUpdateTime(new Date()); detail.setUserInfo(new UserInfo(uid)); return detail; } /** * 原有返利数据同步 * * @param uid * @param orderId * @param orderType * @param money * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createOldFanLi(Long uid, AccountDetails accountDetails, BigDecimal money) throws UserMoneyDetailException { int orderType = 1; String orderId = null; if (accountDetails.getOrderItem() == null) orderId = accountDetails.getId() + ""; else orderId = accountDetails.getId() + "-" + accountDetails.getOrderItem().getOrderId(); if (money == null) throw new UserMoneyDetailException(1, "返利金额为空"); if (uid == null) throw new UserMoneyDetailException(1, "UID为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime( new Date(TimeUtil.convertToTimeTemp(accountDetails.getCreateTime(), "yyyy-MM-dd HH:mm:ss"))); detail.setIdentifyCode( StringUtil.Md5(UserMoneyDetailTypeEnum.fanli.name() + "-" + uid + "-" + orderType + "-" + orderId)); detail.setMoney(money); detail.setTitle(UserMoneyDetailTypeEnum.fanli.getDesc()); detail.setType(UserMoneyDetailTypeEnum.fanli); if (accountDetails.getOrderItem() != null) detail.setDescInfo("订单号:" + accountDetails.getOrderItem().getOrderId()); detail.setUpdateTime(new Date()); detail.setUserInfo(new UserInfo(uid)); return detail; } /** * 分享奖金到账 * * @param uid * @param validCount * @param weiQuanCount * @param invalidCount * @param money * @param time * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createShare(Long uid, int validCount, int weiQuanCount, int invalidCount, BigDecimal money, Date time) throws UserMoneyDetailException { if (money == null) throw new UserMoneyDetailException(1, "返利金额为空"); if (uid == null) throw new UserMoneyDetailException(1, "UID为空"); if (time == null) throw new UserMoneyDetailException(1, "发生时间为空"); Calendar ca = Calendar.getInstance(); ca.setTime(time); ca.add(Calendar.MONTH, -1); String timeF = TimeUtil.getGernalTime(ca.getTimeInMillis(), "yyyy年MM月"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil.Md5(UserMoneyDetailTypeEnum.share.name() + "-" + uid + "-" + timeF)); detail.setMoney(money); detail.setTitle(timeF + UserMoneyDetailTypeEnum.share.getDesc()); detail.setType(UserMoneyDetailTypeEnum.share); detail.setDescInfo(String.format("有效订单:%s笔 维权订单:%s笔 失效订单:%s笔", validCount, weiQuanCount, invalidCount)); detail.setUpdateTime(new Date()); detail.setUserInfo(new UserInfo(uid)); return detail; } /** * 邀请奖金到账 * * @param uid * @param validCount * @param weiQuanCount * @param invalidCount * @param money * @param time * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createInvite(Long uid, int validCount, int weiQuanCount, int invalidCount, BigDecimal money, Date time) throws UserMoneyDetailException { if (money == null) throw new UserMoneyDetailException(1, "返利金额为空"); if (uid == null) throw new UserMoneyDetailException(1, "UID为空"); if (time == null) throw new UserMoneyDetailException(1, "发生时间为空"); Calendar ca = Calendar.getInstance(); ca.setTime(time); ca.add(Calendar.MONTH, -1); String timeF = TimeUtil.getGernalTime(ca.getTimeInMillis(), "yyyy年MM月"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil.Md5(UserMoneyDetailTypeEnum.invite.name() + "-" + uid + "-" + timeF)); detail.setMoney(money); detail.setTitle(timeF + UserMoneyDetailTypeEnum.invite.getDesc()); detail.setType(UserMoneyDetailTypeEnum.invite); if (validCount != 0 || weiQuanCount != 0 || invalidCount != 0) detail.setDescInfo(String.format("有效订单:%s笔 维权订单:%s笔 失效订单:%s笔", validCount, weiQuanCount, invalidCount)); detail.setUpdateTime(new Date()); detail.setUserInfo(new UserInfo(uid)); return detail; } /** * 老版本的分享和邀请赚到账记录 * * @param uid * @param money * @param time * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createShareAndInvite(AccountDetails accountDetail) throws UserMoneyDetailException { if (accountDetail.getMoney() == null) throw new UserMoneyDetailException(1, "返利金额为空"); if (accountDetail.getUserInfo() == null) throw new UserMoneyDetailException(1, "UID为空"); if (accountDetail.getCreateTime() == null) throw new UserMoneyDetailException(1, "发生时间为空"); Date time = new Date(TimeUtil.convertToTimeTemp(accountDetail.getCreateTime(), "yyyy-MM-dd HH:mm:ss")); Calendar ca = Calendar.getInstance(); ca.setTime(time); ca.add(Calendar.MONTH, -1); String timeF = TimeUtil.getGernalTime(ca.getTimeInMillis(), "yyyy年MM月"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime( new Date(TimeUtil.convertToTimeTemp(accountDetail.getCreateTime(), "yyyy-MM-dd HH:mm:ss"))); detail.setIdentifyCode(StringUtil.Md5(UserMoneyDetailTypeEnum.inviteAndShare.name() + "-" + accountDetail.getUserInfo().getId() + "-" + accountDetail.getId())); detail.setMoney(new BigDecimal(accountDetail.getMoney())); detail.setTitle(timeF + UserMoneyDetailTypeEnum.inviteAndShare.getDesc()); detail.setType(UserMoneyDetailTypeEnum.inviteAndShare); detail.setUpdateTime(new Date()); detail.setUserInfo(accountDetail.getUserInfo()); return detail; } /** * 返利维权 * * @param uid * @param drawBack * @param money * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createFanLiWeiQuan(Long uid, TaoBaoWeiQuanDrawBack drawBack, BigDecimal money) throws UserMoneyDetailException { if (drawBack == null) throw new UserMoneyDetailException(1, "退款为空"); if (drawBack.getId() == null) throw new UserMoneyDetailException(1, "退款ID为空"); if (StringUtil.isNullOrEmpty(drawBack.getOrderId())) throw new UserMoneyDetailException(1, "订单号为空"); if (StringUtil.isNullOrEmpty(drawBack.getOrderItemId())) throw new UserMoneyDetailException(1, "子订单号为空"); if (money == null) throw new UserMoneyDetailException(1, "退款金额为空"); if (uid == null) throw new UserMoneyDetailException(1, "UID为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil .Md5(UserMoneyDetailTypeEnum.fanliWeiQuan.name() + "-" + uid + "-" + drawBack.getOrderItemId())); detail.setMoney(new BigDecimal("0").subtract(money)); detail.setTitle(UserMoneyDetailTypeEnum.fanliWeiQuan.getDesc()); detail.setSubTitle("订单维权"); detail.setType(UserMoneyDetailTypeEnum.fanliWeiQuan); detail.setSourceIdentifyId(drawBack.getId()); detail.setDescInfo("订单号:" + drawBack.getOrderId()); detail.setUpdateTime(new Date()); detail.setUserInfo(new UserInfo(uid)); return detail; } /** * 分享赚维权 * * @param uid * @param drawBack * @param money * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createShareWeiQuan(Long uid, TaoBaoWeiQuanDrawBack drawBack, BigDecimal money) throws UserMoneyDetailException { if (drawBack == null) throw new UserMoneyDetailException(1, "退款为空"); if (drawBack.getId() == null) throw new UserMoneyDetailException(1, "退款ID为空"); if (StringUtil.isNullOrEmpty(drawBack.getOrderId())) throw new UserMoneyDetailException(1, "订单号为空"); if (StringUtil.isNullOrEmpty(drawBack.getOrderItemId())) throw new UserMoneyDetailException(1, "子订单号为空"); if (money == null) throw new UserMoneyDetailException(1, "退款金额为空"); if (uid == null) throw new UserMoneyDetailException(1, "UID为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil .Md5(UserMoneyDetailTypeEnum.shareWeiQuan.name() + "-" + uid + "-" + drawBack.getOrderItemId())); detail.setMoney(new BigDecimal("0").subtract(money)); detail.setTitle(UserMoneyDetailTypeEnum.shareWeiQuan.getDesc()); detail.setSubTitle("订单维权"); detail.setType(UserMoneyDetailTypeEnum.shareWeiQuan); detail.setSourceIdentifyId(drawBack.getId()); detail.setDescInfo("订单号:" + drawBack.getOrderId()); detail.setUpdateTime(new Date()); detail.setUserInfo(new UserInfo(uid)); return detail; } /** * 邀请赚维权 * * @param uid * @param drawBack * @param money * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createInviteWeiQuan(Long uid, TaoBaoWeiQuanDrawBack drawBack, BigDecimal money) throws UserMoneyDetailException { if (drawBack == null) throw new UserMoneyDetailException(1, "退款为空"); if (drawBack.getId() == null) throw new UserMoneyDetailException(1, "退款ID为空"); if (StringUtil.isNullOrEmpty(drawBack.getOrderId())) throw new UserMoneyDetailException(1, "订单号为空"); if (StringUtil.isNullOrEmpty(drawBack.getOrderItemId())) throw new UserMoneyDetailException(1, "子订单号为空"); if (money == null) throw new UserMoneyDetailException(1, "退款金额为空"); if (uid == null) throw new UserMoneyDetailException(1, "UID为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil .Md5(UserMoneyDetailTypeEnum.inviteWeiQuan.name() + "-" + uid + "-" + drawBack.getOrderItemId())); detail.setMoney(new BigDecimal("0").subtract(money)); detail.setTitle(UserMoneyDetailTypeEnum.inviteWeiQuan.getDesc()); detail.setSubTitle("订单维权"); detail.setType(UserMoneyDetailTypeEnum.inviteWeiQuan); detail.setSourceIdentifyId(drawBack.getId()); detail.setDescInfo("订单号:" + drawBack.getOrderId()); detail.setUpdateTime(new Date()); detail.setUserInfo(new UserInfo(uid)); return detail; } /** * 提现资金记录 * * @param extract * @return */ public static UserMoneyDetail createExtract(Extract extract) throws UserMoneyDetailException { if (extract == null) throw new UserMoneyDetailException(1, "提现记录不能为空"); if (extract.getId() == null) throw new UserMoneyDetailException(1, "提现记录主键不能为空"); if (extract.getMoney() == null) throw new UserMoneyDetailException(1, "提现金额不能为空"); if (extract.getUserInfo() == null || extract.getUserInfo().getId() == null) throw new UserMoneyDetailException(1, "提现用户不能为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil.Md5(UserMoneyDetailTypeEnum.extract.name() + ":" + extract.getId())); detail.setMoney(new BigDecimal("0").subtract(extract.getMoney())); detail.setSourceIdentifyId(extract.getId()); detail.setTitle(UserMoneyDetailTypeEnum.extract.getDesc()); detail.setType(UserMoneyDetailTypeEnum.extract); detail.setUpdateTime(new Date()); detail.setUserInfo(extract.getUserInfo()); return detail; } /** * 提现账号验证记录 * * @param aa * @param money * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createExtractAccountValid(AlipayAccountValidNormalHistory aa, BigDecimal money) throws UserMoneyDetailException { if (aa == null) throw new UserMoneyDetailException(1, "验证记录不能为空"); if (aa.getUid() == null) throw new UserMoneyDetailException(1, "UID不能为空"); if (money == null) throw new UserMoneyDetailException(1, "金额不能为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil.Md5(UserMoneyDetailTypeEnum.extractVerify.name() + ":" + aa.getId())); detail.setMoney(new BigDecimal("0").subtract(money)); detail.setSourceIdentifyId(aa.getId()); detail.setTitle(UserMoneyDetailTypeEnum.extractVerify.getDesc()); detail.setType(UserMoneyDetailTypeEnum.extractVerify); detail.setUpdateTime(new Date()); detail.setUserInfo(new UserInfo(aa.getUid())); return detail; } /** * 提现拒绝 * * @param extract * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createExtractReject(Extract extract) throws UserMoneyDetailException { if (extract == null) throw new UserMoneyDetailException(1, "提现记录不能为空"); if (extract.getId() == null) throw new UserMoneyDetailException(1, "提现记录主键不能为空"); if (extract.getMoney() == null) throw new UserMoneyDetailException(1, "提现金额不能为空"); if (extract.getUserInfo() == null || extract.getUserInfo().getId() == null) throw new UserMoneyDetailException(1, "提现用户不能为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil.Md5(UserMoneyDetailTypeEnum.extractReject.name() + ":" + extract.getId())); detail.setMoney(extract.getMoney()); detail.setSourceIdentifyId(extract.getId()); detail.setSubTitle("原路退回"); detail.setTitle(UserMoneyDetailTypeEnum.extractReject.getDesc()); detail.setType(UserMoneyDetailTypeEnum.extractReject); detail.setUpdateTime(new Date()); detail.setUserInfo(extract.getUserInfo()); return detail; } /** * 系统红包 * * @param hb * @return * @throws UserMoneyDetailException */ private static UserMoneyDetail createHongBao(HongBao hb, String subTitle) throws UserMoneyDetailException { if (hb == null) throw new UserMoneyDetailException(1, "红包不能为空"); if (hb.getUserInfo() == null) throw new UserMoneyDetailException(1, "用户不能为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode( StringUtil.Md5(UserMoneyDetailTypeEnum.hongbao.name() + "-" + subTitle + "-" + hb.getId())); detail.setMoney(hb.getMoney()); detail.setSourceIdentifyId(hb.getId()); detail.setTitle(UserMoneyDetailTypeEnum.hongbao.getDesc()); detail.setSubTitle(subTitle); detail.setType(UserMoneyDetailTypeEnum.hongbao); detail.setUpdateTime(new Date()); detail.setUserInfo(hb.getUserInfo()); return detail; } private static UserMoneyDetail createHongBaoDeduct(HongBao hb, String subTitle) throws UserMoneyDetailException { if (hb == null) throw new UserMoneyDetailException(1, "红包不能为空"); if (hb.getUserInfo() == null) throw new UserMoneyDetailException(1, "用户不能为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil.Md5(UserMoneyDetailTypeEnum.hongbaoDeduct.name() + "-" + subTitle + "-" + hb.getBeizhu() + "-" + hb.getId())); detail.setMoney(hb.getMoney()); detail.setSourceIdentifyId(hb.getId()); detail.setTitle(UserMoneyDetailTypeEnum.hongbaoDeduct.getDesc()); detail.setSubTitle(subTitle); detail.setType(UserMoneyDetailTypeEnum.hongbaoDeduct); detail.setUpdateTime(new Date()); detail.setUserInfo(hb.getUserInfo()); return detail; } /** * 新人红包 * * @param hb * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createNewerHongBao(HongBao hb) throws UserMoneyDetailException { return createHongBao(hb, "新人红包"); } /** * 新人红包扣除 * * @param hb * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createNewerHongBaoDeduct(HongBao hb) throws UserMoneyDetailException { return createHongBaoDeduct(hb, "新人红包扣除"); } /** * 老版本的新人红包退款 * * @param hb * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createOldNewerHongBaoDeduct(AccountDetails accountDetails) throws UserMoneyDetailException { HongBao hb = new HongBao(); hb.setId(accountDetails.getId()); hb.setBeizhu("老版本"); hb.setMoney(new BigDecimal(accountDetails.getMoney())); hb.setUserInfo(accountDetails.getUserInfo()); UserMoneyDetail userMoneyDetail = createHongBaoDeduct(hb, "新人红包扣除"); userMoneyDetail.setId(accountDetails.getId()); return userMoneyDetail; } /** * 老版本售后订单扣款 * * @param accountDetails * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createOldWeiQuan(AccountDetails accountDetails) throws UserMoneyDetailException { if (accountDetails == null) throw new UserMoneyDetailException(1, "详情不能为空"); if (accountDetails.getUserInfo() == null) throw new UserMoneyDetailException(1, "用户不能为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil.Md5(UserMoneyDetailTypeEnum.weiQuan.name() + "-" + accountDetails.getId())); detail.setMoney(new BigDecimal(accountDetails.getMoney())); detail.setTitle(UserMoneyDetailTypeEnum.weiQuan.getDesc()); detail.setType(UserMoneyDetailTypeEnum.weiQuan); detail.setUpdateTime(new Date()); detail.setUserInfo(accountDetails.getUserInfo()); detail.setId(accountDetails.getId()); return detail; } /** * 新人红包 * * @param accountDetails * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createOldNewerHongBao(AccountDetails accountDetails) throws UserMoneyDetailException { if (accountDetails == null) throw new UserMoneyDetailException(1, "详情不能为空"); if (accountDetails.getUserInfo() == null) throw new UserMoneyDetailException(1, "用户不能为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil .Md5(UserMoneyDetailTypeEnum.hongbao.name() + "-" + "老版本新人红包" + "-" + accountDetails.getId())); detail.setMoney(new BigDecimal(accountDetails.getMoney())); detail.setTitle(UserMoneyDetailTypeEnum.hongbao.getDesc()); detail.setSubTitle("新人红包"); detail.setType(UserMoneyDetailTypeEnum.hongbao); detail.setUpdateTime(new Date()); detail.setUserInfo(accountDetails.getUserInfo()); detail.setId(accountDetails.getId()); return detail; } /** * 老版本提现账号验证 * * @param accountDetails * @return * @throws UserMoneyDetailException */ public static UserMoneyDetail createOldExtractAccountValid(AccountDetails accountDetails) throws UserMoneyDetailException { if (accountDetails == null) throw new UserMoneyDetailException(1, "验证记录不能为空"); if (accountDetails.getUserInfo() == null) throw new UserMoneyDetailException(1, "UID不能为空"); if (accountDetails.getMoney() == null) throw new UserMoneyDetailException(1, "金额不能为空"); UserMoneyDetail detail = new UserMoneyDetail(); detail.setCreateTime(new Date()); detail.setIdentifyCode(StringUtil .Md5(UserMoneyDetailTypeEnum.extractVerify.name() + "-" + "老版本" + "-" + accountDetails.getId())); detail.setMoney(new BigDecimal(accountDetails.getMoney())); detail.setTitle(UserMoneyDetailTypeEnum.extractVerify.getDesc()); detail.setType(UserMoneyDetailTypeEnum.extractVerify); detail.setUpdateTime(new Date()); detail.setUserInfo(accountDetails.getUserInfo()); detail.setId(accountDetails.getId()); return detail; } }