Commit 8826c862 authored by 周健威's avatar 周健威

Merge remote-tracking branch 'origin/dev-chw' into dev-chw

parents f92dcc3f 8d9dc214
...@@ -41,6 +41,21 @@ public class OrderWaterDTO { ...@@ -41,6 +41,21 @@ public class OrderWaterDTO {
private Integer status; private Integer status;
@ApiModelProperty(value = "店铺id")
private Integer companyId;
@ApiModelProperty(value = "分账id(不用传)")
private Integer acceptId;
@ApiModelProperty(value = "正分账id(不用传)")
private Integer zAcceptId;
@ApiModelProperty(value = "分账金额")
private BigDecimal orderAmount;
@ApiModelProperty(value = "订单商品") @ApiModelProperty(value = "订单商品")
private List<OrderGoodsDTO> goodsDTOList; private List<OrderGoodsDTO> goodsDTOList;
......
...@@ -42,6 +42,11 @@ public class AppUserSellingWater implements Serializable { ...@@ -42,6 +42,11 @@ public class AppUserSellingWater implements Serializable {
@ApiModelProperty(value = "身份职位") @ApiModelProperty(value = "身份职位")
private Integer positionId; private Integer positionId;
@Column(name = "accept_id")
@ApiModelProperty(value = "分账id")
private Integer acceptId;
/** /**
* 来源用户id * 来源用户id
*/ */
......
...@@ -35,7 +35,7 @@ public class BaseCommissionRatio implements Serializable { ...@@ -35,7 +35,7 @@ public class BaseCommissionRatio implements Serializable {
@Column(name = "extract") @Column(name = "extract")
@ApiModelProperty(value = "拥金比例") @ApiModelProperty(value = "拥金比例")
private BigDecimal extract; private Integer extract;
@Column(name = "content") @Column(name = "content")
......
package com.github.wxiaoqi.security.admin.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 订单分账表
*
* @author hezhen
* @email 18178966185@163.com
* @date 2020-03-03 13:13:34
*/
@Data
@Table(name = "base_order_accept_detailed")
public class BaseOrderAcceptDetailed implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(generator = "JDBC")
@ApiModelProperty("主键id")
private Integer id;
@Column(name = "mch_id")
@ApiModelProperty(value = "分账账号")
private Integer mchId;
@Column(name = "order_no")
@ApiModelProperty(value = "分账订单")
private String orderNo;
@Column(name = "order_id")
@ApiModelProperty(value = "订单id")
private Integer orderId;
@Column(name = "user_id")
@ApiModelProperty(value = "来源用户id")
private Integer userId;
@Column(name = "division_type")
@ApiModelProperty(value = "类型 1=>平台抽成;2-上级用户拥金;3-上级商家拥金;4-推荐入驻拥金")
private Integer divisionType;
@Column(name = "division_amount")
@ApiModelProperty(value = "分账金额")
private BigDecimal divisionAmount;
@Column(name = "fee")
@ApiModelProperty(value = "手续费")
private BigDecimal fee;
@Column(name = "order_amount")
@ApiModelProperty(value = "订单金额")
private BigDecimal orderAmount;
@Column(name = "status")
@ApiModelProperty(value = "是否入账:0-未结算;1-已结算")
private Integer status;
@Column(name = "extract")
@ApiModelProperty(value = "抽成比例")
private Integer extract;
@Column(name = "type")
@ApiModelProperty(value = "类型:1-转入;2-退款")
private Integer type;
@Column(name = "add_time")
@ApiModelProperty(value = "下单时间")
private Long addTime;
@Column(name = "status_time")
@ApiModelProperty(value = "结算时间")
private Long statusTime;
}
...@@ -104,7 +104,7 @@ public class MyWalletDetail implements Serializable { ...@@ -104,7 +104,7 @@ public class MyWalletDetail implements Serializable {
*/ */
@Column(name = "crt_user") @Column(name = "crt_user")
@ApiModelProperty(value = "操作者ID(如果系统操作,-1)") @ApiModelProperty(value = "操作者ID(如果系统操作,-1)")
private Integer crtUser; private String crtUser;
/** /**
* 操作时间 * 操作时间
......
...@@ -56,6 +56,9 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A ...@@ -56,6 +56,9 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
@Autowired @Autowired
MyWaterBiz myWaterBiz; MyWaterBiz myWaterBiz;
@Autowired
BaseOrderAcceptDetailedBiz acceptDetailedBiz;
//计算用户拥金 //计算用户拥金
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
...@@ -81,225 +84,147 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A ...@@ -81,225 +84,147 @@ public class AppUserSellingWaterBiz extends BaseBiz<AppUserSellingWaterMapper, A
//购买计算用户拥金 //购买计算用户拥金
public void payOrderWater(OrderWaterDTO orderWaterDTO) { public void payOrderWater(OrderWaterDTO orderWaterDTO) {
Integer acceptId = orderWaterDTO.getAcceptId() == null ? 0 :orderWaterDTO.getAcceptId();
log.info("---分账id===="+acceptId);
if (acceptId == 0 ){
return;
}
BaseOrderAcceptDetailed acceptDetailed = acceptDetailedBiz.selectById(acceptId);
if (acceptDetailed == null || (acceptDetailed.getDivisionType() != 2 && acceptDetailed.getDivisionType() != 4) ){
return;
}
List<OrderGoodsDTO> goodsDTOList = orderWaterDTO.getGoodsDTOList();
AppUserSellingWater sellingWater=new AppUserSellingWater();
//订单id //订单id
Integer orderId = orderWaterDTO.getOrderId(); Integer orderId = orderWaterDTO.getOrderId();
//订单号 //订单号
String orderNo = orderWaterDTO.getOrderNo(); String orderNo = orderWaterDTO.getOrderNo();
//用户id //用户id
Integer userId = orderWaterDTO.getUserId(); Integer userId = orderWaterDTO.getUserId();
List<OrderGoodsDTO> goodsDTOList = orderWaterDTO.getGoodsDTOList(); Integer goodId=0;
log.info("购买计算用户拥金----payOrderWater----userId====" + userId + "---orderId===" + orderId + "---orderNo===" + orderNo);
if (orderId == null || orderId == 0 || userId == null || userId == 0 | CollectionUtils.isEmpty(goodsDTOList)) {
log.info("购买计算用户拥金----payOrderWater----参数不能为空----orderId===" + orderId);
return;
}
AppUserRelation relation = relationBiz.getRelationByIdUserIdAndTime(userId);
if (relation == null || relation.getParentId() == null || relation.getParentId() == 0) {
log.info("购买计算用户拥金----payOrderWater--------userId===" + userId + "---无有效上线");
return;
}
Integer parentId = relation.getParentId();
log.info("购买计算用户拥金----payOrderWater--------userId===" + userId + "---parentId===" + parentId);
Integer positionId = 6;
Integer level = 0;
AppUserPosition position = positionBiz.getExtract(parentId);
if (position != null) {
positionId = position.getId();
}
AppUserPosition position1 = positionBiz.getExtract(userId);
if (position != null) {
level = position1.getLevel();
}
log.info("购买计算用户拥金----payOrderWater--------userId===" + userId + "---positionId===" + positionId + "---level===" + level);
if (level != 0) {
log.info("购买计算用户拥金----payOrderWater--------userId===" + userId + "----无法享受拥金");
return;
}
BigDecimal amount = new BigDecimal("0.00");
//商品类型
Integer orderType = 0; Integer orderType = 0;
for (OrderGoodsDTO goodsDto : goodsDTOList) { String title=null;
//商品id String img=null;
Integer goodId = goodsDto.getGoodId(); Integer goodsNumber=0;
//商品价格 if (goodsDTOList.size() > 0){
BigDecimal price = goodsDto.getPrice(); OrderGoodsDTO goodsDto=goodsDTOList.get(0);
goodId=goodsDto.getGoodId();
orderType = goodsDto.getType(); orderType = goodsDto.getType();
//商品比例 title=goodsDto.getTitle();
Integer extract = commissionBiz.getExtract(orderType, goodId); img=goodsDto.getImg();
goodsNumber=goodsDto.getGoodNumber();
if (extract == null || extract == 0) {
extract = position.getExtract();
} }
log.info("购买计算用户拥金----payOrderWater--------userId===" + userId + "---extract===" + extract); sellingWater.setUserId(acceptDetailed.getMchId());
if (extract != null && extract > 0) {
AppUserSellingWater sellingWater = new AppUserSellingWater();
sellingWater.setOrderId(orderId);
sellingWater.setGoodId(goodId);
sellingWater = selectOne(sellingWater);
if (sellingWater != null) {
continue;
}
BigDecimal commission = price.multiply(new BigDecimal(extract + "")).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP);
log.info("购买计算用户拥金----payOrderWater--------userId===" + userId + "---commission===" + commission);
sellingWater = new AppUserSellingWater();
sellingWater.setUserId(parentId);
sellingWater.setSourceId(userId); sellingWater.setSourceId(userId);
sellingWater.setPositionId(positionId);
sellingWater.setOrderId(orderId); sellingWater.setOrderId(orderId);
sellingWater.setOrderNo(orderNo); sellingWater.setOrderNo(orderNo);
sellingWater.setOrderType(orderType); sellingWater.setOrderType(orderType);
sellingWater.setGoodId(goodId); sellingWater.setGoodId(goodId);
sellingWater.setTitle(goodsDto.getTitle()); sellingWater.setTitle(title);
sellingWater.setImg(goodsDto.getImg()); sellingWater.setImg(img);
sellingWater.setPrice(price); sellingWater.setAcceptId(acceptId);
sellingWater.setExtract(extract); sellingWater.setPrice(acceptDetailed.getOrderAmount());
sellingWater.setGoodNumber(goodsDto.getGoodNumber()); sellingWater.setExtract(acceptDetailed.getExtract());
sellingWater.setCommission(commission); sellingWater.setGoodNumber(goodsNumber);
sellingWater.setCommission(acceptDetailed.getDivisionAmount());
insertSelective(sellingWater); insertSelective(sellingWater);
log.info("购买计算用户拥成功----payOrderWater--------userId===" + userId); log.info("购买计算用户未入账----payOrderWater--------userId===" + acceptDetailed.getMchId() + "----amount====" + acceptDetailed.getDivisionAmount() + "--orderType===" + orderType);
amount = amount.add(commission);
}
}
log.info("购买计算用户未入账----payOrderWater--------userId===" + parentId + "----amount====" + amount + "--orderType===" + orderType);
if (orderType == 3) { if (orderType == 3) {
finishOrderWater(orderWaterDTO); finishOrderWater(orderWaterDTO);
} else if (orderType == 1 || orderType == 2) { } else if (orderType == 1 || orderType == 2) {
myWaterBiz.updMyWalletUnbooked(parentId, amount, 1); myWaterBiz.updMyWalletUnbooked(acceptDetailed.getMchId(), acceptDetailed.getDivisionAmount(), 1);
} }
} }
//订单完成计算用户拥金 //订单完成计算用户拥金
public void finishOrderWater(OrderWaterDTO orderWaterDTO) { public BigDecimal finishOrderWater(OrderWaterDTO orderWaterDTO) {
//订单id AppUserSellingWater sellingWater=new AppUserSellingWater();
Integer orderId = orderWaterDTO.getOrderId(); sellingWater.setAcceptId(orderWaterDTO.getAcceptId());
log.info("订单完成计算用户拥金----finishOrderWater----orderId====" + orderId); sellingWater.setWaiting(0);
if (orderId == null || orderId == 0) { sellingWater =selectOne(sellingWater);
return; if (sellingWater != null ){
}
List<AppUserSellingWater> list = getWaterList(orderId);
BigDecimal amount = new BigDecimal("0.00");
Integer userId = 0;
Integer orderType = 0;
String orderNo = "";
if (list.size() > 0) {
orderNo = list.get(0).getOrderNo();
for (AppUserSellingWater sellingWater : list) {
Integer id = sellingWater.getId();
orderType = sellingWater.getOrderType();
userId = sellingWater.getUserId();
sellingWater.setWaiting(1); sellingWater.setWaiting(1);
updateById(sellingWater); updateSelectiveById(sellingWater);
BigDecimal commission = sellingWater.getCommission(); return sellingWater.getCommission();
log.info("订单完成计算用户拥金----finishOrderWater----id====" + id + "---commission==" + commission + "----orderType===" + orderType); }
amount = amount.add(commission); return BigDecimal.ZERO;
}
//订单完成计算用户拥金
public void finishOrderFWater(OrderWaterDTO orderWaterDTO) {
Integer acceptId = orderWaterDTO.getAcceptId() == null ? 0 :orderWaterDTO.getAcceptId();
Integer zAcceptId = orderWaterDTO.getZAcceptId()== null ? 0 :orderWaterDTO.getZAcceptId();
BigDecimal orderAmount = orderWaterDTO.getOrderAmount() == null ? BigDecimal.ZERO : orderWaterDTO.getOrderAmount();
log.info("---分账id===="+acceptId+"----zAcceptId=="+zAcceptId+"---orderAmount===="+orderAmount);
if (acceptId == 0 || zAcceptId == 0 || orderAmount.compareTo(BigDecimal.ZERO) == 0){
return;
} }
BigDecimal unbooked = amount; BaseOrderAcceptDetailed acceptDetailed = acceptDetailedBiz.selectById(acceptId);
log.info("订单完成计算用户拥金----finishOrderWater----orderId====" + orderId + "---amount==" + amount + "---unbooked==" + unbooked); if (acceptDetailed == null || (acceptDetailed.getDivisionType() != 2 && acceptDetailed.getDivisionType() != 4) ){
if (orderType == 1) { return;
List<OrderGoodsDTO> goodsDTOList = orderWaterDTO.getGoodsDTOList(); }
log.info("租车订单完成-----goodsDTOList===" + goodsDTOList); AppUserSellingWater sellingWater =new AppUserSellingWater();
if (CollectionUtils.isNotEmpty(goodsDTOList)) { sellingWater.setAcceptId(zAcceptId);
for (OrderGoodsDTO goodsDto : goodsDTOList) { sellingWater=selectOne(sellingWater);
//商品id if (sellingWater != null ){
Integer goodId = goodsDto.getGoodId(); BigDecimal commission=orderAmount.multiply(new BigDecimal(sellingWater.getExtract())).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
//商品价格 sellingWater.setAcceptId(acceptId);
BigDecimal price = goodsDto.getPrice();
AppUserSellingWater sellingWater = new AppUserSellingWater();
sellingWater.setOrderId(orderId);
sellingWater.setGoodId(goodId);
sellingWater = selectOne(sellingWater);
if (sellingWater == null || sellingWater.getExtract() == null || sellingWater.getExtract() == 0) {
log.info("租车订单完成-----sellingWater---不存在或extract---为空");
continue;
}
if (price.compareTo(sellingWater.getPrice()) >= 0) {
log.info("租车订单完成-----完成价格大于支付价格");
continue;
}
price = sellingWater.getPrice().subtract(price);
Integer extract = sellingWater.getExtract();
log.info("租车订单完成-----price=====" + price + "---extract====" + extract);
BigDecimal commission = price.multiply(new BigDecimal(extract + "")).divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP);
log.info("租车订单完成--------userId===" + userId + "---commission===" + commission);
sellingWater.setWaiting(1); sellingWater.setWaiting(1);
sellingWater.setStatus(1); sellingWater.setStatus(1);
sellingWater.setCommission(commission); sellingWater.setCommission(commission);
sellingWater.setPrice(orderAmount);
sellingWater.setId(null); sellingWater.setId(null);
insertSelective(sellingWater); insertSelective(sellingWater);
log.info("租车订单完成计算用户拥成功----payOrderWater--------userId===" + userId);
amount = amount.subtract(commission);
}
}
}
log.info("订单完成计算用户拥金----finishOrderWater--------orderId===" + orderId + "----amount====" + amount + "--orderType===" + orderType);
int r = amount.compareTo(BigDecimal.ZERO);
//更新钱包
if (r == 1 && userId > 0) {
MyWalletDetail detail = new MyWalletDetail();
detail.setUserId(userId);
detail.setAmount(amount);
detail.setCono(orderId);
detail.setWithDrawOrderNo(orderNo);
detail.setSource(1);
myWaterBiz.updMyWater(detail);
}
if ((orderType == 1 || orderType == 2) && unbooked.compareTo(BigDecimal.ZERO) == 1) {
myWaterBiz.updMyWalletUnbooked(userId, unbooked, 2);
} }
} }
}
//订单退款计算用户拥金 //订单退款计算用户拥金
public void refundOrderWater(OrderWaterDTO orderWaterDTO) { public void refundOrderWater(OrderWaterDTO orderWaterDTO) {
//订单id Integer orderId = orderWaterDTO.getOrderId() == null ? 0 : orderWaterDTO.getOrderId();
Integer orderId = orderWaterDTO.getOrderId();
log.info("订单完成计算用户拥金----refundOrderWater----orderId====" + orderId); log.info("订单完成计算用户拥金----refundOrderWater----orderId====" + orderId);
if (orderId == null || orderId == 0) { if ( orderId == 0) {
return; return;
} }
List<AppUserSellingWater> list = getWaterList(orderId); List<AppUserSellingWater> list = getWaterList(orderId);
BigDecimal amount = new BigDecimal("0.00");
BigDecimal unbooked = new BigDecimal("0.00");
Integer userId = 0;
Integer orderType = 0;
String orderNo = "";
if (list.size() > 0) { if (list.size() > 0) {
orderNo = list.get(0).getOrderNo();
for (AppUserSellingWater sellingWater : list) { for (AppUserSellingWater sellingWater : list) {
Integer id = sellingWater.getId();
orderType = sellingWater.getOrderType();
userId = sellingWater.getUserId();
sellingWater.setWaiting(1); sellingWater.setWaiting(1);
updateById(sellingWater); updateById(sellingWater);
sellingWater.setId(null); sellingWater.setId(null);
sellingWater.setStatus(1); sellingWater.setStatus(1);
insertSelective(sellingWater); insertSelective(sellingWater);;
BigDecimal commission = sellingWater.getCommission(); }
log.info("订单完成计算用户拥金----refundOrderWater----id====" + id + "---commission==" + commission + "---orderType====" + orderType); }
unbooked = unbooked.add(commission); }
}
log.info("订单完成计算用户拥金----refundOrderWater----orderId====" + orderId + "---amount==" + amount + "---unbooked===" + unbooked);
int r = amount.compareTo(BigDecimal.ZERO); public void updWalletByOrderId(OrderWaterDTO orderWaterDTO){
//更新钱包 Integer orderId = orderWaterDTO.getOrderId() == null ? 0 : orderWaterDTO.getOrderId();
if (r == 1 && userId > 0) { log.info("订单完成计算用户拥金----refundOrderWater----orderId====" + orderId);
MyWalletDetail detail = new MyWalletDetail(); if ( orderId == 0) {
return;
}
List<AppUserSellingWater> list=mapper.getCommisionByOrder(orderId);
if (list.size() > 0){
for (AppUserSellingWater appUserSellingWater:list){
Integer userId=appUserSellingWater.getUserId();
BigDecimal price=appUserSellingWater.getPrice() == null ? BigDecimal.ZERO :appUserSellingWater.getPrice();
BigDecimal commission=appUserSellingWater.getCommission() == null ? BigDecimal.ZERO :appUserSellingWater.getCommission();
if (price.compareTo(BigDecimal.ZERO) > 0){
myWaterBiz.updMyWalletUnbooked(userId,price,2);
}
if (commission.compareTo(BigDecimal.ZERO) > 0){
MyWalletDetail detail=new MyWalletDetail();
detail.setUserId(userId); detail.setUserId(userId);
detail.setAmount(amount); detail.setAmount(commission);
detail.setCono(orderId); detail.setCono(orderId);
detail.setWithDrawOrderNo(orderNo); detail.setWithDrawOrderNo(appUserSellingWater.getOrderNo());
detail.setSource(1); detail.setSource(1);
myWaterBiz.updMyWater(detail); myWaterBiz.updMyWater(detail);
} }
if (orderType == 1 || orderType == 2) {
myWaterBiz.updMyWalletUnbooked(userId, unbooked, 2);
} }
} }
} }
......
package com.github.wxiaoqi.security.admin.biz; package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.entity.BaseCommissionRatio; import com.github.wxiaoqi.security.admin.entity.BaseCommissionRatio;
import com.github.wxiaoqi.security.admin.entity.BaseGoodCommission;
import com.github.wxiaoqi.security.admin.mapper.BaseCommissionRatioMapper; import com.github.wxiaoqi.security.admin.mapper.BaseCommissionRatioMapper;
import com.github.wxiaoqi.security.common.biz.BaseBiz; import com.github.wxiaoqi.security.common.biz.BaseBiz;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example; import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
...@@ -22,14 +19,11 @@ public class BaseCommissionRatioBiz extends BaseBiz<BaseCommissionRatioMapper, B ...@@ -22,14 +19,11 @@ public class BaseCommissionRatioBiz extends BaseBiz<BaseCommissionRatioMapper, B
public BigDecimal getExtract(Integer type){
Example example=new Example(BaseGoodCommission.class); public List<BaseCommissionRatio> getList(){
example.createCriteria().andEqualTo("type", type).andEqualTo("status",1); Example example=new Example(BaseCommissionRatio.class);
List<BaseCommissionRatio> list = mapper.selectByExample(example); example.createCriteria().andEqualTo("status",1);
if (list != null && list.size() != 0) { return mapper.selectByExample(example);
return list.get(0).getExtract();
}
return BigDecimal.ZERO;
} }
} }
\ No newline at end of file
package com.github.wxiaoqi.security.admin.biz;
import com.github.wxiaoqi.security.admin.bo.UserIncomeBo;
import com.github.wxiaoqi.security.admin.dto.*;
import com.github.wxiaoqi.security.admin.entity.*;
import com.github.wxiaoqi.security.admin.mapper.BaseOrderAcceptDetailedMapper;
import com.github.wxiaoqi.security.admin.vo.SellingWalletPagVo;
import com.github.wxiaoqi.security.admin.vo.SellingWalletVo;
import com.github.wxiaoqi.security.common.biz.BaseBiz;
import com.github.wxiaoqi.security.common.exception.BaseException;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;
import java.math.BigDecimal;
import java.util.*;
/**
* 订单分账表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
@Service
@Slf4j
public class BaseOrderAcceptDetailedBiz extends BaseBiz<BaseOrderAcceptDetailedMapper, BaseOrderAcceptDetailed> {
@Autowired
AppUserRelationBiz relationBiz;
@Autowired
BaseGoodCommissionBiz commissionBiz;
@Autowired
AppUserPositionBiz positionBiz;
@Autowired
AppUserDetailBiz detailBiz;
@Autowired
private AppUserLoginBiz appUserLoginBiz;
@Autowired
private AppUserDetailBiz appUserDetailBiz;
@Autowired
MyWaterBiz myWaterBiz;
@Autowired
BaseCommissionRatioBiz commissionRatioBiz;
@Autowired
BranchCompanyBiz companyBiz;
@Autowired
AppUserSellingWaterBiz sellingWaterBiz;
//计算用户拥金
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
public void orderWater(OrderWaterDTO orderWaterDTO) {
//订单状态
Integer status = orderWaterDTO.getStatus();
if (status == null || status == 0) {
log.info("购买计算用户拥金----payOrderWater----参数不能为空----status===" + status);
return;
}
if (status == 1) {
payOrderAccept(orderWaterDTO);
} else if (status == 2) {
finishOrderAccept(orderWaterDTO);
sellingWaterBiz.updWalletByOrderId(orderWaterDTO);
} else {
refundOrderAccept(orderWaterDTO);
sellingWaterBiz.updWalletByOrderId(orderWaterDTO);
}
}
//购买计算用户拥金
public void payOrderAccept(OrderWaterDTO orderWaterDTO) {
//订单id
Integer orderId = orderWaterDTO.getOrderId() == null ? 0 : orderWaterDTO.getOrderId();
//订单号
String orderNo = orderWaterDTO.getOrderNo();
//用户id
Integer userId = orderWaterDTO.getUserId() == null ? 0 : orderWaterDTO.getUserId();
Integer companyId = orderWaterDTO.getCompanyId() == null ? 0 : orderWaterDTO.getCompanyId();
List<OrderGoodsDTO> goodsDTOList = orderWaterDTO.getGoodsDTOList();
log.info("分账----payOrderAccept----userId====" + userId + "---orderId===" + orderId + "---orderNo===" + orderNo+"----companyId==="+companyId);
if (orderId == 0 || userId == 0 || companyId == 0 || CollectionUtils.isEmpty(goodsDTOList)) {
throw new BaseException("分账----payOrderAccept----参数不能为空----orderId===" + orderId,ResultCode.FAILED_CODE);
}
BigDecimal orderAmount = goodsDTOList.stream().map(OrderGoodsDTO::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
log.info("分账----payOrderAccept--------userId===" + userId + "---orderAmount===="+orderAmount);
List<BaseCommissionRatio> baseCommissionRatios = commissionRatioBiz.getList();
BigDecimal amount=BigDecimal.ZERO;
if (baseCommissionRatios.size() > 0){
for (BaseCommissionRatio commissionRatio:baseCommissionRatios){
Integer type = commissionRatio.getType() == null ? 0 : commissionRatio.getType();
Integer mchId=0;
Integer divisionType=0;
if (type == 1 ){
BranchCompany branchCompany = companyBiz.selectById(companyId);
if (branchCompany != null ){
mchId=branchCompany.getInviterAccount() == null ? 0 : branchCompany.getInviterAccount();
}
divisionType=4;
}else if (type == 2){
AppUserRelation relation = relationBiz.getRelationByIdUserIdAndTime(userId);
if (relation == null ) {
log.info("分账----payOrderAccept--------userId===" + userId + "---无有效上线");
continue;
}
mchId = relation.getParentId() == null ? 0 : relation.getParentId();
divisionType = mchId > 0 ? 2: 3;
mchId = mchId == 0 ? relation.getCompanyId() : mchId;
}else if (type == 3){
divisionType=1;
}
log.info("分账----payOrderAccept----mchId===="+mchId+"----divisionType==="+divisionType);
if (type != 3 && mchId == 0){
continue;
}
BigDecimal divisionAmount=orderAmount.multiply(new BigDecimal(commissionRatio.getExtract())).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
BaseOrderAcceptDetailed acceptDetailed=new BaseOrderAcceptDetailed();
BeanUtils.copyProperties(orderWaterDTO,acceptDetailed);
acceptDetailed.setMchId(mchId);
acceptDetailed.setOrderAmount(orderAmount);
acceptDetailed.setDivisionAmount(divisionAmount);
acceptDetailed.setExtract(commissionRatio.getExtract());
acceptDetailed.setDivisionType(divisionType);
acceptDetailed.setAddTime(System.currentTimeMillis());
acceptDetailed.setStatus(0);
insertSelective(acceptDetailed);
amount=amount.add(divisionAmount);
orderWaterDTO.setAcceptId(acceptDetailed.getId());
sellingWaterBiz.payOrderWater(orderWaterDTO);
}
}
if (orderAmount.compareTo(amount) > 0){
BigDecimal divisionAmount=orderAmount.subtract(amount).setScale(2, BigDecimal.ROUND_HALF_UP);
BaseOrderAcceptDetailed acceptDetailed=new BaseOrderAcceptDetailed();
BeanUtils.copyProperties(orderWaterDTO,acceptDetailed);
acceptDetailed.setMchId(companyId);
acceptDetailed.setOrderAmount(orderAmount);
acceptDetailed.setDivisionAmount(divisionAmount);
acceptDetailed.setDivisionType(5);
acceptDetailed.setAddTime(System.currentTimeMillis());
acceptDetailed.setStatus(0);
insertSelective(acceptDetailed);
}
}
public void payOrderFAccept(OrderWaterDTO orderWaterDTO) {
Integer orderId = orderWaterDTO.getOrderId() == null ? 0 : orderWaterDTO.getOrderId();
List<OrderGoodsDTO> goodsDTOList = orderWaterDTO.getGoodsDTOList();
if (goodsDTOList.size() > 0){
BigDecimal goodsPries = goodsDTOList.stream().map(OrderGoodsDTO::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
BaseOrderAcceptDetailed acceptDetailed=new BaseOrderAcceptDetailed();
acceptDetailed.setOrderId(orderId);
acceptDetailed.setStatus(1);
List<BaseOrderAcceptDetailed> acceptDetaileds = selectList(acceptDetailed);
if (acceptDetaileds.size() > 0){
BigDecimal orderAmount = acceptDetaileds.get(0).getOrderAmount();
if (orderAmount.compareTo(goodsPries) > 0){
orderAmount=orderAmount.subtract(goodsPries);
BigDecimal amount=BigDecimal.ZERO;
for (BaseOrderAcceptDetailed acceptDetailed1:acceptDetaileds){
Integer zAcceptId = acceptDetailed1.getId();
acceptDetailed1.setType(2);
acceptDetailed1.setId(null);
acceptDetailed1.setOrderAmount(orderAmount);
if (acceptDetailed1.getDivisionType() == 5 ){
if (orderAmount.compareTo(amount) > 0){
BigDecimal divisionAmount=orderAmount.subtract(amount).setScale(2, BigDecimal.ROUND_HALF_UP);
acceptDetailed1.setDivisionAmount(divisionAmount);
insertSelective(acceptDetailed1);
}
}else {
BigDecimal divisionAmount=orderAmount.multiply(new BigDecimal(acceptDetailed1.getExtract())).divide(new BigDecimal(100)).setScale(2, BigDecimal.ROUND_HALF_UP);
acceptDetailed1.setDivisionAmount(divisionAmount);
insertSelective(acceptDetailed1);
amount=amount.add(divisionAmount);
orderWaterDTO.setAcceptId(acceptDetailed1.getId());
orderWaterDTO.setZAcceptId(zAcceptId);
orderWaterDTO.setOrderAmount(orderAmount);
sellingWaterBiz.finishOrderFWater(orderWaterDTO);
}
}
}
}
}
}
//订单完成计算用户拥金
public void finishOrderAccept(OrderWaterDTO orderWaterDTO) {
//订单id
Integer orderId = orderWaterDTO.getOrderId() == null ? 0 : orderWaterDTO.getOrderId();
log.info("订单完成计算用户拥金----finishOrderWater----orderId====" + orderId);
if (orderId == 0) {
return;
}
List<BaseOrderAcceptDetailed> list = getAcceptList(orderId);
BigDecimal amount =BigDecimal.ZERO;
if (list.size() > 0) {
for (BaseOrderAcceptDetailed acceptDetailed : list) {
Integer id = acceptDetailed.getId();
Integer divisionType = acceptDetailed.getDivisionType();
acceptDetailed.setStatus(1);
acceptDetailed.setStatusTime(System.currentTimeMillis());
updateSelectiveById(acceptDetailed);
orderWaterDTO.setAcceptId(id);
BigDecimal commison=sellingWaterBiz.finishOrderWater(orderWaterDTO);
log.info("分账----finishOrderAccept----id====" + id + "---commison==" + commison + "----divisionType===" + divisionType);
amount = amount.add(commison);
}
Integer orderType = 0;
List<OrderGoodsDTO> goodsDTOList = orderWaterDTO.getGoodsDTOList();
if (goodsDTOList.size() > 0){
OrderGoodsDTO orderGoodsDTO=goodsDTOList.get(0);
orderType=orderGoodsDTO.getType() == null ? 0 : orderGoodsDTO.getType();
}
BigDecimal unbooked = amount;
log.info("订单完成计算用户拥金----finishOrderWater----orderId====" + orderId + "---amount==" + amount + "---unbooked==" + unbooked);
if (orderType == 1) {
payOrderFAccept(orderWaterDTO);
}
log.info("订单完成计算用户拥金----finishOrderWater--------orderId===" + orderId + "----amount====" + amount + "--orderType===" + orderType);
}
}
//订单退款
public void refundOrderAccept(OrderWaterDTO orderWaterDTO) {
Integer orderId = orderWaterDTO.getOrderId() == null ? 0 :orderWaterDTO.getOrderId();
log.info("分账----refundOrderAccept----orderId====" + orderId);
if (orderId == 0) {
return;
}
List<BaseOrderAcceptDetailed> list = getAcceptList(orderId);
if (list.size() > 0) {
for (BaseOrderAcceptDetailed acceptDetailed : list) {
acceptDetailed.setStatus(1);
acceptDetailed.setStatusTime(System.currentTimeMillis());
updateSelectiveById(acceptDetailed);
acceptDetailed.setId(null);
acceptDetailed.setType(2);
insertSelective(acceptDetailed);
}
sellingWaterBiz.refundOrderWater(orderWaterDTO);
}
}
//获取拥金列表
public List<BaseOrderAcceptDetailed> getAcceptList(Integer orderId) {
Example example = new Example(BaseOrderAcceptDetailed.class);
example.createCriteria().andEqualTo("orderId", orderId).andEqualTo("type", 1).andEqualTo("status", 0);
return mapper.selectByExample(example);
}
}
\ No newline at end of file
...@@ -201,4 +201,5 @@ public class MyWaterBiz extends BaseBiz<MyWalletMapper, MyWallet>{ ...@@ -201,4 +201,5 @@ public class MyWaterBiz extends BaseBiz<MyWalletMapper, MyWallet>{
} }
} }
} }
\ No newline at end of file
...@@ -5,6 +5,7 @@ import cn.hutool.db.sql.Order; ...@@ -5,6 +5,7 @@ import cn.hutool.db.sql.Order;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.github.wxiaoqi.security.admin.biz.AppUserSellingWaterBiz; import com.github.wxiaoqi.security.admin.biz.AppUserSellingWaterBiz;
import com.github.wxiaoqi.security.admin.biz.BaseOrderAcceptDetailedBiz;
import com.github.wxiaoqi.security.admin.dto.OrderGoodsDTO; import com.github.wxiaoqi.security.admin.dto.OrderGoodsDTO;
import com.github.wxiaoqi.security.admin.dto.OrderWaterDTO; import com.github.wxiaoqi.security.admin.dto.OrderWaterDTO;
import com.rabbitmq.client.Channel; import com.rabbitmq.client.Channel;
...@@ -36,6 +37,9 @@ public class WaterMQHandler { ...@@ -36,6 +37,9 @@ public class WaterMQHandler {
@Autowired @Autowired
AppUserSellingWaterBiz waterBiz; AppUserSellingWaterBiz waterBiz;
@Autowired
BaseOrderAcceptDetailedBiz acceptDetailedBiz;
/** /**
* 佣金 * 佣金
* @param * @param
...@@ -128,7 +132,7 @@ public class WaterMQHandler { ...@@ -128,7 +132,7 @@ public class WaterMQHandler {
break; break;
} }
waterBiz.orderWater(orderWaterDTO); acceptDetailedBiz.orderWater(orderWaterDTO);
executorService.shutdown(); executorService.shutdown();
Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG); Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);
......
...@@ -33,4 +33,5 @@ public interface AppUserSellingWaterMapper extends Mapper<AppUserSellingWater> { ...@@ -33,4 +33,5 @@ public interface AppUserSellingWaterMapper extends Mapper<AppUserSellingWater> {
List<AppUserSellingWaterDTO> statisticsStatffSellerWaterByUserIdsAndTime(@Param("userIds") List<Integer> userIds, List<AppUserSellingWaterDTO> statisticsStatffSellerWaterByUserIdsAndTime(@Param("userIds") List<Integer> userIds,
@Param("startTime") Long startTime, @Param("startTime") Long startTime,
@Param("endTime") Long endTime); @Param("endTime") Long endTime);
List<AppUserSellingWater> getCommisionByOrder(@Param("orderId") Integer orderId);
} }
package com.github.wxiaoqi.security.admin.mapper;
import com.github.wxiaoqi.security.admin.entity.BaseOrderAcceptDetailed;
import tk.mybatis.mapper.common.Mapper;
/**
* 订单分账表
*
* @author zjw
* @email 18178966185@163.com
* @date 2019-07-11 14:14:54
*/
public interface BaseOrderAcceptDetailedMapper extends Mapper<BaseOrderAcceptDetailed> {
}
package com.github.wxiaoqi.security.admin.rest.admin;
import com.github.wxiaoqi.security.admin.biz.BaseOrderAcceptDetailedBiz;
import com.github.wxiaoqi.security.admin.dto.OrderWaterDTO;
import com.github.wxiaoqi.security.admin.entity.BaseOrderAcceptDetailed;
import com.github.wxiaoqi.security.admin.feign.UserFeign;
import com.github.wxiaoqi.security.admin.feign.rest.UserRestInterface;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author Administrator
*/
@Slf4j
@RestController
@RequestMapping("backstage/accept")
@Api(tags = {"拥金比例"})
public class AdminBaseOrderAcceptDetailedController extends BaseController<BaseOrderAcceptDetailedBiz, BaseOrderAcceptDetailed> implements UserRestInterface {
@Autowired
UserFeign userFeign;
@Override
public UserFeign getUserFeign() {
return userFeign;
}
@PostMapping("orderWater")
@ApiModelProperty("设置")
public ObjectRestResponse orderWater(@RequestBody OrderWaterDTO orderWaterDTO) {
baseBiz.orderWater(orderWaterDTO);
return ObjectRestResponse.succ();
}
}
...@@ -175,4 +175,18 @@ FROM ...@@ -175,4 +175,18 @@ FROM
</if> group by user_id) AS `auswd` </if> group by user_id) AS `auswd`
on auswd.user_id=auswu.user_id on auswd.user_id=auswu.user_id
</select> </select>
<select id="getCommisionByOrder" resultType="com.github.wxiaoqi.security.admin.entity.AppUserSellingWater">
SELECT
r.user_id as userId,
SUM(r.zCommission)-SUM(r.fCommission) as commission,
SUM(r.zCommission) as price
FROM
(
SELECT user_id,commission as zCommission,0 as fCommission,price FROM app_user_selling_water WHERE order_id = #{orderId} and `status`= 0 and waiting = 1
UNION ALL
SELECT user_id,0 as zCommission,commission as fCommission,price FROM app_user_selling_water WHERE order_id = #{orderId} and `status`= 1 and waiting = 1
) r
GROUP BY r.user_id
</select>
</mapper> </mapper>
\ No newline at end of file
package com.xxfc.platform.activity.dto;
import com.github.wxiaoqi.security.common.vo.PageParam;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* @author libin
* @version 1.0
* @description
* @data 2019/12/3 18:56
*/
@Data
@Builder(toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
public class ActivityDTO extends PageParam {
private Date startTime;
private Date endTime;
private Integer goodsType;
}
package com.xxfc.platform.activity.vo;
import com.xxfc.platform.activity.entity.Activity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 峰会活动表
*
* @author wuweizhi
* @email 18178966185@163.com
* @date 2020-10-08 09:48:35
*/
@Data
public class ActivityVo extends Activity {
}
package com.xxfc.platform.activity.biz; package com.xxfc.platform.activity.biz;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.Query;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.dto.ActivityDTO;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import com.xxfc.platform.activity.vo.ActivityLuckyDrawListVo;
import com.xxfc.platform.activity.vo.ActivityVo;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.xxfc.platform.activity.entity.Activity; import com.xxfc.platform.activity.entity.Activity;
...@@ -15,4 +22,14 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz; ...@@ -15,4 +22,14 @@ import com.github.wxiaoqi.security.common.biz.BaseBiz;
*/ */
@Service @Service
public class ActivityBiz extends BaseBiz<ActivityMapper, Activity> { public class ActivityBiz extends BaseBiz<ActivityMapper, Activity> {
public ObjectRestResponse<PageDataVO<ActivityVo>> getAllByPage(ActivityDTO activityDTO) {
Integer page = activityDTO.getPage() == null ? 1 : activityDTO.getPage();
Integer limit = activityDTO.getLimit() == null ? 10 : activityDTO.getLimit();
activityDTO.setPage(page);
activityDTO.setLimit(limit);
Query query = new Query(activityDTO);
PageDataVO<ActivityVo> pageDataVO = PageDataVO.pageInfo(query, () -> mapper.getAllByPage(query.getSuper()));
return ObjectRestResponse.succ(pageDataVO);
}
} }
\ No newline at end of file
package com.xxfc.platform.activity.mapper; package com.xxfc.platform.activity.mapper;
import com.xxfc.platform.activity.entity.Activity; import com.xxfc.platform.activity.entity.Activity;
import com.xxfc.platform.activity.vo.ActivityLuckyDrawListVo;
import com.xxfc.platform.activity.vo.ActivityVo;
import tk.mybatis.mapper.common.Mapper; import tk.mybatis.mapper.common.Mapper;
import java.util.List;
import java.util.Map;
/** /**
* 峰会活动表 * 峰会活动表
* *
...@@ -11,5 +16,5 @@ import tk.mybatis.mapper.common.Mapper; ...@@ -11,5 +16,5 @@ import tk.mybatis.mapper.common.Mapper;
* @date 2020-10-08 09:48:35 * @date 2020-10-08 09:48:35
*/ */
public interface ActivityMapper extends Mapper<Activity> { public interface ActivityMapper extends Mapper<Activity> {
List<ActivityVo> getAllByPage(Map<String, Object> param);
} }
package com.xxfc.platform.activity.rest.admin;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.rest.BaseController;
import com.github.wxiaoqi.security.common.vo.PageDataVO;
import com.xxfc.platform.activity.biz.ActivityBiz;
import com.xxfc.platform.activity.dto.ActivityDTO;
import com.xxfc.platform.activity.dto.ActivityLuckDrawFindDTO;
import com.xxfc.platform.activity.entity.Activity;
import com.xxfc.platform.activity.vo.ActivityLuckyDrawListVo;
import com.xxfc.platform.activity.vo.ActivityVo;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("admin/activity")
public class ActivityAdminController extends BaseController<ActivityBiz, Activity> {
/**
* 活动列表
*
* @param activityDTO
* @return
*/
@PostMapping("/page")
@ResponseBody
public ObjectRestResponse<PageDataVO<ActivityVo>> listActivtyLuckyDrawWithPage(@RequestBody ActivityDTO activityDTO) {
return baseBiz.getAllByPage(activityDTO);
}
}
\ No newline at end of file
...@@ -30,4 +30,24 @@ ...@@ -30,4 +30,24 @@
<result property="isDel" column="is_del"/> <result property="isDel" column="is_del"/>
</resultMap> </resultMap>
<select id="getAllByPage" resultType="com.xxfc.platform.activity.vo.ActivityVo" parameterType="Map">
select * from `activity` where 1=1
<if test="goodsType != null">
and `goods_type`=#{goodsType}
</if>
<if test="startTime != null and endTime != null">
and `crt_time` between #{startTime} and #{endTime}
</if>
<if test="startTime != null and endTime == null">
and <![CDATA[
`crt_time` >= #{startTime}
]]>
</if>
<if test="startTime==null and endTime!=null">
and <![CDATA[
`crt_time`<=#{endTime}
]]>
</if>
order by `crt_time` desc
</select>
</mapper> </mapper>
\ No newline at end of file
...@@ -52,6 +52,12 @@ public class AppVehicleController extends BaseController<VehicleBiz> { ...@@ -52,6 +52,12 @@ public class AppVehicleController extends BaseController<VehicleBiz> {
return ObjectRestResponse.succ(baseBiz.info(vehicleFindDTO)); return ObjectRestResponse.succ(baseBiz.info(vehicleFindDTO));
} }
@GetMapping("detail/{id}")
@ApiModelProperty("商品详情")
public ObjectRestResponse detail(@PathVariable("id") String id ) {
return ObjectRestResponse.succ(baseBiz.selectById(id));
}
......
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